查找资料期间在教科书上发现几个有趣的算法题,刚接触算法的前端小白(本菜鸡) 跃跃欲试,在始请各位大佬赋教。
问题描述:
问题描述: 编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;再依次5的倍数的牌翻一次,6的,7的,直到以52为基数的翻过。 输出:这时正面向上的牌有哪些?
解题思路:
建立一个列表,并填充52个元素,初始化为1表示正面建立一个fill函数递归处理以base为基数翻牌,将指定元素乘-1表示翻牌传入base参数并循环fill函数, 直到以52为基数的翻过打印出值为正数1所在的位置
代码:
let list
= [];
function generateCards(){
for(var i
= 0; i
< 52 ;i
++){
list
.push(1);
}
}
function fill(base
){
let n
= base
;
helper(base
)
function helper(n
){
if(n
>52) return
list
[n
-1] = list
[n
-1]*-1;
helper(n
+base
)
}
}
function result(){
generateCards();
for(var i
=2;i
<=52;i
++){
fill(i
);
}
list
.map((item
,index
)=>{
if(item
===1){
console
.log(index
+1);
}
})
}
result();
結果: