题目描述:
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版权协议,转载请附上原文出处链接和本声明。