n个人围成一个圈循环报数,数到interval的出圈,求报数序列。
#include <iostream>
#include <vector>
using namespace std;
int test(){
int n, interval; // 编号1..n,数到interval的退出
cin >> n >> interval;
vector<bool> exit(n + 1, false);
int left = n;
int cnt = 0;
int id = 1; // 报数的id
cout << "报数序列:" ;
while (left > 1){
// 是否报数
if (!exit[id]){
cnt++; // 报数
// 退出
if (cnt == interval){
cout << id << " -> ";
exit[id] = true;
cnt = 0;
left--;
}
}
id++;
// 处理循环
if (id == n + 1) id = 1;
}
int i = 1;
for (; i <= n && exit[i]; i++);
cout << i << endl;
return EXIT_SUCCESS;
}
结果:
8 3
报数序列:3 -> 6 -> 1 -> 5 -> 2 -> 8 -> 4 -> 7
请按任意键继续. . .