2256 . 综合题

Josephus 问题

有 $n$ 个人围成一个圈,依次标号 $0$ 至 $n - 1$。从 $0$ 号开始,依次 $0 , 1 , 0 , 1 , \dots$ 交替报数,报到 $1$ 的人会离开,直至圈中只剩下一个人。求最后剩下人的编号。

试补全模拟程序。

#include <stdio.h>

using namespace std;

const int MAXN = 1000000;
int F[MAXN];

int main() {
    int n;
    scanf("%d", & n);
    int i = 0, p = 0, c = 0;
    while (①) {
        if (F[i] == 0) {
            if (②) {
                F[i] = 1;
                ③;
            }
            ④;
        }
        ⑤;
    }
    int ans = -1;
    for (int i = 0; i < n; i++)
        if (F[i] == 0)
            ans = i;
    printf("%d\n", ans);
    return 0;
}
1 . (单选题)

①处应填( )

2 . (单选题)

②处应填( )

3 . (单选题)

③处应填( )

4 . (单选题)

④处应填( )

5 . (单选题)

⑤处应填( )