④处应填()
(Josephus 问题)有 𝑛 个人围成一个圈,依次标号 0 至 𝑛−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 (c < n) {
if (F[i] == 0) {
if (!p) {
F[i] = 1;
c++;
}
④;
}
i = (i + 1) % n;
}
int ans = -1;
for (i = 0; i < n; i++)
if (F[i] == 0)
ans = i;
cout << ans << endl;
return 0;
}
i++
i = (i + 1) % n
c++
p ^= 1