题目描述: 有n个人围成一圈,按顺序排号 从第一个人开始报数(从1到3报数) 所有报到3的人退出圈子 问最后留下来的是第几个人 我们可以将这个题目看成以一类题目: n个人围成一圈 从第一个人开始数 数到N的人被淘汰 问最后剩哪个人(n和N由键盘输入)
/**
* 设没有被淘汰的人的状态为 0 淘汰了的人的状态为 1
*/
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int n, N;
cin >> n >> N;
int sum = 0, num = 0, h[n] = {0};//对数组赋初值为0
for ( int i = 0; sum != n - 1; i++ ){//一直循环直到只剩一个人在圈子里面
if ( !h[i % n] ) { //如果h[i%n]为0则继续数 (注意对人数取余 防止越界)
num++;
if ( !(num % N) ) { //数到数字N的时候令其等于1(出圈子)
h[i % n] = 1;
sum++;
}
}
}
for ( int i = 0; i < n; i++ ) {
if ( h[i] == 0 ) {
printf("%d\n", i + 1);//输出最后剩下的一个在圈子里面的下标加一(因为是第几个人 从1开始)
}
}
return 0;
}