编号为 1,2,3,…,n 的 n 个人围坐一圈,任选一个正整数 m 作为报数上限值,从第一个人开始按顺时针方向报数,报数到 m 时停止,报数为 m 的人出列。
从出列人的顺时针方向的下一个人开始又从 1 重新报数,如此下去,直到所有人都全部出列为止。
主要思路:每次找到一个就填充为零
void myfun(int *array,int size,int stop)
{
int total=0;
int step=0;
int i;
while(1)
{
int count=0;
while(1)
{
i=step;
for(;i<size;i++)
{
if(array[i]!=0)
{
count++;
if(count==stop)
{
i++;
break;
}
}
}
if(count==stop)
{
printf("%d\n",array[i-1]);
array[i-1]=0;
total++;
step=i;
break;
}
else
{
step=0;
}
}
if(total==size)
break;
}
}
int main()
{
int array[100]={0};
for(int k=0;k<100;k++)
{
array[k]=k+1;
}
myfun(array,sizeof(array)/sizeof(int),9);
return 0;
}