13、围圈报数问题

13、围圈报数问题

有n个人围成1个圈,顺序编号,从第1个人开始报数,从1报到5,凡是报到5的退出圈子,问最后留下的人原来是几号?

#include<stdio.h>
int left(int a[], int n);
int main(){
	int n, i;
	scanf("%d", &n);
	int a[n];
	
	//给每一个人编号 
	for(i=0;i<n;i++){
		a[i]=i+1;
	}
	
	printf("%d", left(a,n));
	return 0;
} 

int left(int a[], int n){
	//num当前在场剩余人数,cnt为当前报数 
	int i=0, num=n, cnt=0;
	while(num!=1){
		if(a[i]!=0){			//a[i]!=0表示a[i]在场,则报数	 
			if(++cnt == 5){		//若a[i]报的数为5,则使a[i]=0,表示a[i]已退场 
				a[i]=0;
				num--;
				cnt=0;			//++cnt == 5要与cnt = 0 搭配
			}
		}
		if(++i == n)i=0;		//若++i==n,即i指向圈尾的后一个位置即圈开头,则i=0使i指向圈开头 
	}
	
	//注意必须遍历数组才能找出还在场的那个人 
	for(i=0;i<n;i++){
		if(a[i]!=0)return a[i];
	}
}
发布了16 篇原创文章 · 获赞 0 · 访问量 318

猜你喜欢

转载自blog.csdn.net/NAU_LHT/article/details/104333644
今日推荐