把这个问题用数组实现啦~~~
//约瑟夫环问题
#include <iostream>
using namespace std;
void Josephus(int a[],int n,int m,int s)//n个数,差距为m,起始位置s
{
if (m == 0)
{
cout<<"m无效"<<endl;
return;
}
int k;
for (k=0; k<n; k++)//初始化
{
a[k] = k+1;
}
int i = s-1 , j;
int temp;
for (k=n; k>0; k--)//对
{
i = (i+m-1)%k;
if (i != k-1)
{
temp = a[i];
for (j=i; j<k-1; j++)
{
a[j] = a[j+1];
}
a[k-1] = temp;
}
}
for (k=0; k<n/2; k++)
{
temp = a[k];
a[k] = a[n-k-1];
a[n-k-1] = temp;
}
}
int main()
{
int *b;
int n,m,s;
cin>>n;
cin>>m;
cin>>s;
b = new int[n];
int i;
Josephus(b,n,m,s);
for (i=0;i<n;i++)
{
cout<<b[i];
}
delete [] b;
return 0;
}