题目
约瑟夫 (Josephus) 问题:n 个人围坐成一圈,从 1 开始顺序编号;游戏开始,从第一个人开始由 1 到 m 循环报数,报到 m 的人退出圈外,问最后留下的那个人原来的序号。
相关阅读
完整代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m, s[999];
memset(s, 0, sizeof(s));
cin >> n >> m;
int cur = 0;
for (int i = 0; i < n; i++){
int count = 1;
while (count != m){
if (s[cur] == 0)
count++;
cur = (cur+1)%n;
while (s[cur] != 0)
cur = (cur+1)%n;
}
s[cur] = 1;
for (int j = 0; j < n; j++)
cout << s[j] << " ";
cout << " ->" << cur+1 << endl;
}
cout << "The last one is No." << cur+1 << " !" << endl;
}