测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题