约瑟夫环问题
n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.
双链表解法
数组模拟(大数组)
#include<iostream>
#include<cstdio>
using namespace std;
int a[100001];//定义数组
int main(){
int bs=1,h=1,t,i,n,m;
cin>>n>>m;
for(i=1;i<=n;i++)
a[i]=i;
t=n+1;
while(h<t){
if(bs!=m){
bs++; //指针前移
a[t]=a[h];
t++;
h++;
}
else{
cout<<a[h]<<" ";//输出
bs=1;
h++;
}
}
return 0;//返回
}