C语言编程题:有n个人围成一圈,循序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号人。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[100];
int i,n,num,time;
int *p=arr;
printf("please input the number of students:");
scanf("%d",&n);
for(i=0;i<n;i++)
arr[i]=i+1;
p=arr;
num=n;
i=1;
time=1;
while(num!=1)
{
if(time%n==0) /*完成一次从第一位到最后一位的循环,指针p回到数组第一个元素*/
p=arr;
if(i%3==0&&i!=0) /*若不加&&i!=0,第一次为i赋0后就会无限循环下去*/
{
i=0;
*p=0; /*报到3的人赋值0,再在总人数num中减去这个人,直到只剩1人,解锁循环*/
num--;
}
i++;
p++;
time++;
}
while(*p==0)
p++;
printf("The last one is No.%d",*p);
return 0;
}