小米OJ #67【開始報數 約瑟夫環問題】
阿新 • • 發佈:2018-12-12
描述
有 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; }