题库练习 (Josephus 问题)有 𝑛 个人围成一个圈,依次标号 0 至 𝑛 − 1。从 0 号开 始,依次 0, 1, 0, 1, ... 交替报数,报到 1 的人会离开,直至圈中只剩下一个人。求最后 剩下人的编号。试补全模拟程序。#include <iostream>

A61599 | (Josephus 问题)有 𝑛 个人围成一个圈,依次标号 0 至 𝑛 − 1。从 0 号开 始,依次 0, 1, 0, 1, ... 交替报数,报到 1 的人会离开,直至圈中只剩下一个人。求最后 剩下人的编号。试补全模拟程序。#include <iostream>

来源2021年
时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

(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 (①) {
        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;
}
C++ 编辑器
输入
输出