0
点赞
收藏
分享

微信扫一扫

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

清冷的蓝天天 2022-03-11 阅读 78

使用工具:

Dev-C++ 5.11

解题思路:

比如有4个人报数,报到3的人会退出圈子,那第四个人就应该报1,第一个人报2,依此类推。题中提到的退出圈子,在代码中并不是真正的退出member[1000]数组,而是给它附上0这个新值,做一个标记,一直到4个人只剩下一个人,才用循环遍历四个人中,不为0的人,并将其打印输出。count计数只会在1、2、3三个数游荡,因为每次报数就是1、2、3,并不是第四个人报完了1,还有五个人、第六个人报数2、3。

参考代码:

#include<stdio.h>
int main()
{
int n,member[1000],count=0,temp;
int i=0;
printf("Input number of person:n=");
scanf("%d",
for(int i=0;i<n;i++)
member[i]=i+1;//把人员编号存进去
temp=n;
while(n>1)//1234
{
if(member[i]!=0)
count++;
if(count==3)
{
member[i]=0;
count=0;
n--; //1234 1204 1004 1
}
i++;// 不能放在member[] 里面
//printf("temp:%d\n",temp);temp的值并不会随着n的自减而自减
if(i==temp)
i=0;//temp = n 是为了让剩余的继续按着123 编号报数 ,
//编号4报了数1 是不是该让编号为1 的人报数 那是不是下标就要指向0 ,因为member [0]=1
}
for(int i=0;i<temp;i++)
{
if(member[i]!=0)
printf("The last one is %d",member[i]);
}
}

运行结果:

举报

相关推荐

0 条评论