经典算法问题 - 扑克牌游戏

    科技2025-03-18  18

    查找资料期间在教科书上发现几个有趣的算法题,刚接触算法的前端小白(本菜鸡) 跃跃欲试,在始请各位大佬赋教。

    问题描述:

    问题描述: 编号为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); //1表示正面 } } function fill(base){ let n = base;//以base為基數 helper(base) function helper(n){ if(n>52) return list[n-1] = list[n-1]*-1; // helper(n+base)//递归增加base } } function result(){ generateCards(); for(var i=2;i<=52;i++){ fill(i); } list.map((item,index)=>{//打印正数1所在的位置 if(item===1){ console.log(index+1); } }) } result();

    結果:

    Processed: 0.015, SQL: 8