C语言程序设计教程(第三版)课后习题10.5
题目描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入
初始人数n
输出
最后一人的初始编号
样例输入
3
样例输出
2
#include<stdio.h>
main()
{
int i,a[100],j,k=0;//定义人员数量
int quit=0;//退出人数
scanf("%d",&i);//参与人数
for(j=1;j<=i;j++)//给成员编号
{
a[j]=j;
}
j=0;
while(quit<i-1)//剩最后一个人时退出
{
if(a[j]!=0)k++;//过滤退出的玩家,剩下的玩家喊口号
if(k==3){a[j]=0,quit++;k=0;}//当有玩家喊道3时退出
if(j==i)j=0;//检测一圈是否结束
j++;//下一个人
}
for(j=1;j<=i;j++)//筛选出在场的玩家
{
if(a[j]!=0){printf("%d",a[j]);}
}
return 0;
}