A49771. 报数模拟
填空题
困难
知识点
题目描述
报数模拟
题目描述
有 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;
}
上一题
下一题