PTA 7-28:猴子选大王(新手保姆级教学)

题目:

该题选自PTA基础题7-28,题目如下:


思路:

首先这题要求按顺序依次计数,从1~3依次报,报到3的就退出,然后继续报,报到3就退出,不是按一轮一轮进行的,所以我们不能简单的认为定义一个数组就好,然后%3==0的就退出,所以我们需要定义一个计数的变量flag,每次数一个就加1,当flag%3==0的数就是要退出的猴子,这里画一个简单的图来理解一下:

如上可以看出,括号中的值就是flag的值,能够被整除的数都可以被除掉,然后我们可以用while循环,只留最后一个数,当只剩一个数的时候就停止,最后再打印这最后一个数,就能解决这个问题了。


代码实现:(注释详解)

#include<stdio.h>
int main()
{
	int N;
	int flag = 0;
	int zero = 0;
	int arr[1000] = { 0 };  //将数组全部初始化为0,为了后续使用
	scanf("%d", &N);
	for (int i = 1; i <= N; i++)
	{
		arr[i] = i;  //将“猴子”存在一个数组里
	}
	while (zero < N - 1)  //当数组中0的个数小于N-1的时候,就执行,当zero为N-1的时候,说明只剩一个猴子了,就是猴王
	{
		for (int i = 1; i <= N; i++)
		{
			if (arr[i] == 0)  
				continue;  //遇到有0的就跳过,从不是0的数字开始数123
			flag++;  //每次数了123就加1
			if (flag % 3 == 0)  
			{
				arr[i] = 0;  //当能整除3时(也就是上面那个图片的括号内的数字)说明该猴子数到了3,就把这个数变为0,和上方初始化相同,就相当于这个猴子退出
				zero++;  //退出了一个猴子,zero就+1,为了能够将while循环停止
			}
		}
	}
	for (int j = 1; j <= N; j++)
	{
		if (arr[j] != 0)
			printf("%d", arr[j]);  //最后打印不是0的数字,也就是最开始的猴王的数字
	}
	return 0;
}

执行结果:


好的本期题目分享就到这,咱们下期见!!!!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七分七分_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值