报数问题
题目描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入格式
初始人数n
输出格式
最后一人的初始编号
样例输入
3
样例输出
2
AC代码(C语言)
#include <stdio.h>
int main()
{
int n;
int i=-1;//表示数数的指针
int count=0;//数人计数,数到3便置0
int num[102];//表示1-100个人,num[i]=1时表示第i+1号人出圈了
scanf("%d",&n);
int temp=n;//总人数
for(int i=0;i<n;i++)
num[i]=0;
while(temp>1){//当大于1个人,游戏继续
while(count<3){//还没数到3
i=(i+1)%n;//数数指针加1,考虑到循环转圈的情况。到了n-1后,下一个位置变为0
if(num[i]==0) {
count++;
}
}
num[i]=1;//第i+1号人出圈
temp--;//总人数少一
count=0;//计数器置为0
}
for(int i=0;i<n;i++){
if(num[i]==0) printf("%d\n",i+1);//打印出最后未出圈的第i+1号人
}
return 0;
}