约瑟夫环
- 1、2、3循环报数,把报数为3的人踢出局,剩下的人仍然循环报数
#include <iostream>
#include <map>
using namespace std;
int main(){
map<int,int> b;
const int num=10;
//用map来表示人,键1(表示第一个人),其值表示它的下一人
//如:b[1]=2,表示1的下一个人是2,依此类推。
for(int i=1;i<=num;i++){
b[i]=i+1;
}
b[num]=1;
//flag报数标记
//flag=1,从第1个人开始报数
//剩下1个人的时候出循环
int flag=1;
while(b[flag]!=flag){
//报1个数
flag=b[flag];
//把报2的人指向4,即把报3的人删掉
b[flag]=b[b[flag]];
//把令牌传给4(下一轮报数为1的人)
flag=b[flag];
}
cout<<flag<<endl;
return 0;
}