用两个数组一个是所在的标号,一个是做标记用的,报完之后就做上标记;
#include <iostream>
using namespace std;
int main()
{
int n,m,x[100000],y[100000];
while(cin>>n>>m)
{
int i,z=0,k=0,t=n,count;
for(i=1;i<=n;i++)
{
y[i]=1;
x[i]=i;
}
for(i=1;i<=n-1;i++)
{
count=0;
for(int j=1;j>=1;j++)
{
if (z==n)
z=0;//如果到了最后一个号码就重新开始接着报数
z++;
if (y[z]==1)
count++;
if (count==m)//数到m的时候就跳出;z是记录此时的号码,然后标记一下;
break;
}
y[z]=0;//做上标记;
cout<<x[z]<<' ';//打印出已经出局的号码;
}
for(i=1;i<=n;i++)
if(y[i]==1)
{
cout<<i<<endl;
break;
}
}
return 0;
}