c语言转圈踢人问题

来源:百度知道 编辑:UC知道 时间:2024/06/26 06:15:55
50人围一圈依次报数,数到3的倍数的人出列,问当只剩一个人时他原来的位子在哪里?
那位高手给个答案啊?
我的解法:#include<stdio.h>
void main()
{
int a[50],i,m,n=50;
for(i=0;i<50;i++)
a[i]=i+1;
m=0,i=0;
while(n!=1)
{
if(a[i]!=0)
{ m++;
if(m%3==0)
{
a[i]=0;
n--;
}

}
i=(i+1)%50;
}
for(i=0;i<50;i++)
{ if(a[i]!=0)
printf("最后剩下的一个人原始所在的位置为第%d个",i);
}
printf("\n");
}

while(n!=1)
{
if(a[i]!=0)/**/
{
m++;
if(m==3)/*从0开始不会错过3*/
{
a[i]=0;
m=0;/*重新开始数3个,下一个就是第一个*/
n--;
}
}
i++;
if(i==50)/*从0开始也不会错过50,如果倒低了,就是开头了*/
i=0;
}
/*按照你原意修改,不过好像你打印出来的数会少1,因为i从0开始*/