首页 > 其他分享 >n个人围成一圈,顺序排号从1到n。从第一个人开始报数(从一到三如此循环)。凡是报到三的出局,最后剩下的一个人原始编号为?

n个人围成一圈,顺序排号从1到n。从第一个人开始报数(从一到三如此循环)。凡是报到三的出局,最后剩下的一个人原始编号为?

时间:2023-02-04 11:23:59浏览次数:45  
标签:排号 int 围成 flag num 编号 报数


#include<stdio.h>
int main(){
	int num,n,i=0,flag=0; //num记录剩余人数,n记录总人数,i为原始编号,flag为编号123时的编号
	printf("输入人数\n");
	scanf("%d",&n);
	num=n;
	int person[20]={0};
	for( i=1;i<=n;i++){
			if(person[i]==0){//循环条件确认进入圈的人都没有被淘汰的人	
	       	 flag++;//本次排队的第几个人
				if(flag%3==0){ //每三个人时淘汰第三个人,只有这
				                //个人没有被淘汰,flag才加一,也就是说才能被排进123小分队
				person[i]=1;  //将这个人赋值一剔除
				num--;
				flag=0;
				}
			}
			if(num<=1){  //仅剩一人时条件满足退出循环
				break;
			}
			
			if(i==n)  //当i等于n时,将i置0,在下次循环前会加一,因此还是从一开始,
			          //即使i为1时的人已经被剔除,那么第一个if不满足,也不会排进队伍,而是进入下次循环
				{
				 i=0;
				}
		
	}
	   	for(int j=1;j<=n;j++){ 
		 if(person[j]==0) //为零说明从始至终都没有被置1,也就是没有被剔除
		 	{
			printf("%d\t",j);
		    }
		
	    }
	return 0;
}


`

标签:排号,int,围成,flag,num,编号,报数
From: https://www.cnblogs.com/cyqf/p/16754684.html

相关文章