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",&n);
	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 条评论