n个人(0,1,2,3,4...n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,...m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m。
#include<stdio.h>
int main()
{
int n,k,m;
scanf("%d%d%d",&n,&k,&m);
int arr[100]={0,0,0,0,0};//定义一个数组存放这些人
int i,j,s=1,t=n;
for(i=k;i<n;i++)
{
if(t==1)
{
break;
}
if(arr[i]!=666)//这个人是否出列
{
arr[i]=s;//从k开始报数
if(arr[i]==m)//如果报的数与m一样则出列
{
arr[i]=666;//表示这个人出列
t--;
s=1;
k=i+1;//从出列那个人后面开始重新报数
if(k>=n)
{
k=0;//如果到了最后一个人则从第一开始
i=k-1;
}
continue;
}
s++;
}
if(i==n-1)
{
k=0;
i=k-1;
continue;
}
}
for(j=0;j<n;j++)
{
if(arr[j]!=666)
{
printf("%d\n",j);
}
}
}