小米OJ #67【开始报数 约瑟夫环问题】

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/qq_37867156/article/details/82916905