【编程实现】
报数模拟。
有n 个人围成一个圈,从 1 到n 按顺序排好号。然后从第一个人开始顺时针报数(从 1 到 3 报数),报到 3 的人退出圈子后,后面的人继续从 1 到 3 报数,直到留下最后一个人游戏结束,问最后留下的是原来第几号。
输入描述:输入一个正整数 n(4<n<600)
输出描述:输出最后留下的人,原来的编号是多少?
【样例输入】
5
【样例输出】
4
//【参考答案】
#include <iostream>
#include <queue>
using namespace std;
int main(){
int n;
cin >> n;
queue<int> q;
for (int i = 1; i <= n; ++i){
q.push(i);
}
int cnt = 0;
while (q.size() > 1){
cnt++;
if (cnt % 3 != 0){
int x = q.front();
q.push(x);
}
q.pop();
}
cout << q.front() << endl;
return 0;
}