|

楼主 |
发表于 2012-6-25 16:32:55
|
显示全部楼层
修改后的完整代码
#include<stdio.h>
void main()
{
int i,k,m,n,num[50],*p;
printf("input number of person:n=");
scanf("%d",&n);
p = num;
for(i=0; i< n; i++)
{
*(p+i) = i+1 ; /*以1至n编序给每个人编号*/
}
i =0; /*i为每个循环时计数变量*/
k =0; /*k为按1,2,3报数时的计数变量*/
m =0; /*m为退出人数*/
while(m< n-1) /*当退出的数比n-1少时(即未退出人数大于1时)执行循环体*/
{
if(*(p+i)!=0) k++;
if(k==3)
{
*(p+i)=0;
k=0; /*对退出的编号置0*/
m++;
}
i++;
if(i==n) i=0; /*报数到尾后,i恢复为0*/
}
while(*p ==0) p++;
printf("The last one is No.%d\n",*p);
}
你可以自己编译运行下 输入8 结果是7
1 2 3 4 5 6 7 8 编号
1 2 0 1 2 0 1 2 报数,且报3的置0
0 1 0 2 0 0 1 2
0 0 0 1 0 0 2 0
0 0 0 0 0 0 1 0 最后只剩下编号7 |
|