题目: 有 n个人围成一圈,顺序排号。从第一个人开始报数(从 1到 3报数),凡报到 3的 人退出圈子,问最后留下的是原来第几号的那位。(模拟)

算法基础 专栏收录该内容
164 篇文章 0 订阅

题目:
有 n个人围成一圈,顺序排号。从第一个人开始报数(从 1到 3报数),凡报到 3的 人退出圈子,问最后留下的是原来第几号的那位。

思路:
题目说是排成一圈,可以看成一个数组的排列。用i从下标为1的地方开始遍历这个数组(个人习惯从下标为1处开始),每当i==n+1的时候,就给他重新设置成1,这样就实现了n个人围成一圈的效果。 再就是数组的每个元素在一开始都设置成1,表示在圈中,如果要退出圈子,就给它设成0。

代码:

#include <stdio.h>
int main()
{
	int a[50], i, n, count, flag=0;
	scanf("%d", &n);
	count=n;
	for (i=1; i<=n; i++)
		a[i]=1;//所有人都在圈内,为1 
	for (i=1; ;i++){
		if (i==n+1)
			i=1;//如果i超出了n个人,让他重新回到1 
		
		if (a[i]!=0)	flag++;
		else	continue;
		
		if (flag%3==0){
			a[i]=0;
			count--;
		}
		
		if (count==1)//表示只剩下一个人在圈内 
			break;
	}
	for (i=1; i<=n; i++)
		if (a[i]!=0)
			printf("%d", i);//注意这里是输出i,一开始写的a[i],调试了老半天 
	return 0;
} 
©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值