有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出 圈子,问最后留下的是原

2020-10-28 情感 97阅读
呵呵,同一个人啊
我还是贴出来吧
#include
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 *(p+i)=i+1;
i=0;
k=0;
m=0;
while(m {
if(*(p+i)!=0)//判断这个号(原来的序号)是否出局
k++;//这个号没有出局,就报数,计数器加1
if(k==3)//报3的出局
{
*(p+i)=0;//将出局的这个人标记
k=0;//使计数器置零,以便后面的人报数
m++;//出局人数计数器加1
}
i++;//将指针后移,虽然i不是指针,但p+i就是指针了,所以i就是为指针服务的
if(i==n)//如果指针移到了尾部,则返回到头部
i=0;
}
//以上的循环是主要焦点,后面的就是找出最后那个人,这个好理解
while(*p==0)//用这个可以只判断所找号的前面的号(包括所找号),不用判断后面的。
p++;
printf("The last one is N0.%d\n",*p);
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com