循环依次报数,选出最后剩下那一个;

问题:15只股票选出一只,依次1-7循环报数,报到7的被淘汰,直到最后一只为大王。

知识点:循环

思路:每只都设为true  1,然后循环报数,到7时变成false  0,下次循环跳过false的那一只,直到true的数量=1时结束循环。输出true的那个的索引值即可。

public class 循环报数选大王 {
    //m个猴子,依次1-n报数,报道n的淘汰,直到最后一只,选为大王;
    //每个设为1,然后循环报数,到n时编程0,下次循环跳过0的位置,直到1的数量只有1个时结束,输出1的那个索引
    public static int searchOne(int[] arr,int n){
        for (int i = 0; i <arr.length ; i++) {
            arr[i] = 1;
        }

        int count=0;
        int trueArr = arr.length;

        while (trueArr != 1){
            for (int i = 0; i <arr.length ; i++) {
                if(arr[i] == 0){
                    continue;
                }
                count++;
                if(count%n==0){
                    arr[i]=0;
                    trueArr--;
                }
            }
        }

        int index = 0;
        for (int i = 0; i <arr.length ; i++) {
            System.out.print(arr[i]+"\t");
            if(arr[i]==1) index = i+1;
        }

        return index;
    }

    public static void main(String[] args) {
        int[] arr = new int[15];
        System.out.println("第"+searchOne(arr,7)+"是大王");
    }

}

输出结果:
0    0    0    0    1    0    0    0    0    0    0    0    0    0    0    第5是大王

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值