/约瑟夫圆环 有n个人数数 ,从1到3 , 数到3的人死,输出剩下的一个人原先的位置/
当然这里的计数器可以换成任意的,例如1到9或者其他的。原理都是相通的。
/*约瑟夫圆环 有n个人数数 ,从1到3 , 数到3的人死,输出剩下的一个人原先的位置*/
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int a[n] = {0};
//数数器
int num = -1;
//死人计数器
int countDead = 0;
for(int i=0;;i=(i+1)%n){
// 如果是死人就跳过
if(a[i] == 1){
continue;
}
// 剩下一个人,游戏结束
if(countDead == n-1){
break;
}
// 开始数数
num ++;
// 如果数到3 ,处死这个人
if(num%3 == 2){
countDead++;
a[i] = 1;
}
}
//找出活着的人
int flag = 0;
for(int i=0;i<n;i++){
if(a[i] == 0){
flag = i;
break;
}
}
// 记住位置要加1
cout << flag + 1;
return 0;
}