#include <stdio.h>
void main()
{
int i,k,m,n,num,*p;
printf("input the number of person:n=");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
{
*(p+i)=i+1;
}
i=0;
k=0;
m=0;
//m为出圈的人数,n为总人数,因为最后要剩下一个,所以m<n-1
while(m<n-1)
{
//k是要1 2 3,当当前位置的指针的值不是0的时候,k++
if(*(p+i)!=0) k++;
//数到3的人出圈,把该位置的指针的值赋0
if(k==3)
{
*(p+i)=0; //k=3的时候,把当前的指针的值赋0
k=0; //从头开始数
m++; //出圈的人数加1
}
i++; //数了多少
if(i==n) //数到最后一个人,(包括已经是0的位置)数了一圈,把i=0,进入下一圈
i=0;
}
while(*p==0) p++; //找到指针的值不是0的, 就是剩下的人
printf("the last one is N0.%d\n",*p);
}
因为这个程序是数到3的人出圈, 把数到3的对应的当前指针的值等于0,在从1开始数, 如果数到最后了, 就从头开始(i=n),这是就要把指针是0的跳过( if(*(p+i)!=0) k++;),继续, 把数到3的位置的值等于0,到最后剩下一个人的时候跳出。 :shock::shock::shock:
页:
[1]