用JAVA实现翻牌问题

        问题:有52张牌,使它们全部正面朝上,从第2张开始,凡是2的倍数位置上的牌翻成正面朝下:接着从第3张牌开始,凡是3的倍数位置上的牌,正面朝上的翻成正面朝下,正面朝下的翻成正面朝上:接着第三轮从第4张牌开始,凡是4的倍数位置上的牌按上面相同规则翻转,以此类推,直到第1张要翻的牌是第52张为止。统计最后有几张牌正面朝上,以及它们的位置号。运用递归算法,从2的倍数一直翻到52的倍数,不断地重复着类似的事情,采用递归去做。

我首先写的是一个简单的方法,为了方便理解,并没有采用递归。(由于时间问题,并没有用代码实现,有时间补上)

更正:下面代码输出时,应该选择a[i]==0的索引(因为刚开始设定的正面朝上为数字0,而且应该写为a[i]==0,双等于才是比较,一个等于是赋值)

5cc0380d3e8c4353bdcb4b392936fc8f.png

31f38df585ab42019bfb444cb9b72cec.png

完整代码如下: 

package test1;

/**
 * 2023/10/25
 */
public class Turn {
    public static void main(String[] args) {
        change();
    }

    public static void change() {
        int[] a = new int[53];
        for (int i = 0; i < 53; i++) {
            a[i] = 0;
        }
        for (int i = 2; i < 53; i++) {
            int k = 1;
            while (i * k < 53) {
                a[i * k] = 1 - a[i * k];
                k += 1;
            }
        }
        System.out.println("正面朝上的牌的索引为:");
        for (int i = 1; i < 53; i++) {
            if (a[i] == 0) {
                System.out.print(i + " ");
            }
        }
    }
}

结果: 

正面朝上的牌的索引为:
1 4 9 16 25 36 49 
Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值