算法 --- 循环报数

问题描述:

有1-n个人围成一圈,从头开始循环报1-3,报到3的人出局,求最后剩下的那个人。

Java源码实现:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        boolean[] arr = new boolean[n];
        //所有人都默认未出局
        for (int i = 0; i < n; i++) {
            arr[i] = true;
        }
        int num = n;
        int count = 0;  // 记录循环1-3
        int index = 0; // 当前操作元素
        while(num > 1) { // num为1的时候表示目前只剩下一个人未出局
            if (arr[index]) {
               count++;
               if (count == 3) {
                   arr[index] = false; //报到3则出局
                   count = 0;//重新开始报数
                   num--; // 报到3的这个人出局
               }
            }
            index++; // 下一个人
            if (index == n) { //报到n,重头开始
                index = 0;
            }
        }
        for (int i = 0; i < n; i++) {
            if (arr[i]) {
                System.out.println(i+1);
                break;
            }
        }
    }

 

你可能感兴趣的:(算法)