请大家品尝一段代码,我吃不出味道!
有n个人围成一圈,顺序排号。从第一个人开始报数(从一到三报数),凡报道3的人退出圈子,问最后留下的是原来第几号的那个人。#include "stdafx.h"
#include<stdio.h>
int main(int argc, char* argv[])
{
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;//每次循环时计数变量
k=0;//按1,2,3报数时的计数变量
m=0;//退出人数
while(m<n-1)//当退出人数比n-1少时执行循环体
{
if(*(p+i)!=0)
{
k++;
}
if(k==3)//对退出的人的编号置为0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)//这里不懂
{
i=0;
}
}
while(*p==0)//这里更加不懂
{
p++;
}
printf("The last one is No.%d\n",*p);
return 0;
}
程序中给出了一些注释,不过很多地方不懂,希望大家品尝过后,给我注释一下,谢谢啦!