CSP2021PJ-19
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
- (完善程序)
(Josephus问题)有 n 个人围成一个圈,依次标号 0 至 n − 1。从 0 号开始,依次 0,1,0,1,...交替报数,报到 1 的人会离开,直至圈中只剩下一个人。求最后剩下人的编号。
试补全模拟程序。
#include <iostream>
using namespace std;
const int MAXN = 1000000;
int F[MAXN];
int main() {
int n;
cin >> n;
int i = 0, p = 0, c = 0;
while (_________________________) {
if (F[i] == 0) {
if (_________________________) {
F[i] = 1;
_________________________;
}
_________________________;
}
_________________________;
}
int ans = -1;
for (i = 0; i < n; i++)
if (F[i] == 0)
ans = i;
cout << ans << endl;
return 0;
}
① 处应填( )。
{{ select(1) }}
- i < n
- c < n
- i < n - 1
- c < n - 1
② 处应填( )。
{{ select(2) }}
- i % 2 == 0
- i % 2 == 1
- p
- !p
③ 处应填( )。
{{ select(3) }}
- i++
- i = (i + 1) % n
- c++
- p ^= 1
④ 处应填( )。
{{ select(4) }}
- i++
- i = (i + 1) % n
- c++
- p ^= 1
⑤ 处应填( )。
{{ select(5) }}
- i++
- i = (i + 1) % n
- c++
- p ^= 1