版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37867156/article/details/82916905
描述
有 500 个小孩围成一圈,编号从 1 到 500,从第一个开始报数:1,2,3,1,2,3,1,2,3,……每次报到 3 的小孩退出。问第 n 个被淘汰的小孩,在最开始 500 人里是的编号是几?
输入
正整数 N,表示要计算的为第 N 个淘汰的小孩的编号,0 < N <= 500
输出
第 N 个淘汰的小孩的编号
输入样例
1 2 206 311
输出样例
3 6 176 223
题解:队列模拟。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
queue<int> q;
int main()
{
int n, a[505];
for(int i = 1; i <= 500; i++){
q.push(i);
}
int cnt = 0, id = 1;
while(!q.empty()){
int t = q.front();
q.pop();
cnt++;
if(cnt == 3){
a[id++] = t;
cnt = 0;
}else q.push(t);
if(id > 500) break;
}
while (cin >> n) {
cout << a[n] << endl;
}
return 0;
}