算法题解答——队尾幸运编号

题目描述:
N个人排成一队, 从1到5轮流报数, 报5的人是幸运者, 出列。报到队尾后, 从队首接着报,依次循环
问: 排在队尾的人是第几名幸运者
注: N为小于100000的正整数
例:
1人排成一队, 他就是第一名幸运者。
3人排成一队, 他就是第2名幸运者。
5人排成一队, 他就是第1名幸运者。
8人排成一队, 他就是第3名幸运者。

代码如下:

public class Solution {
    private static int fun(int N) {
        // num:队尾是第几个幸运者
        int cnt = 0, i = 0, num = 0;
        // int数组默认初始化为0
        int[] res = new int[N];
        while (true) {
            if (i == N) i = 0;
            for (; i < N; i++) {
                if (res[i] == 1) continue;
                cnt++;
                // 不是队尾,并且每次数到5个人就执行下面的操作
                if (i < N - 1 && cnt == 5) {
                    res[i] = 1;
                    num++;
                    cnt = 0;
                }
                // 是队尾,并且每次数到5个人就执行下面的操作
                if (i == N - 1 && cnt == 5) {
                    num++;
                    return num;
                }
            }
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()) {
            int N = sc.nextInt();
            System.out.println(fun(N));
        }
    }
}

版权声明:本文为weixin_52272771原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。