ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AT916 题解

2022-08-25 00:31:53  阅读:147  来源: 互联网

标签:g3 g2 g1 int 题解 d% 爆掉 AT916


题目传送门

小学生又双叒叕来写题解啦!

大家使用的都是 while 循环,那我来一个 for 循环版本!

我的思路是贪心

怎么个贪心法呢?

由于最多只能执行一百次,那我们就得多用三。

准确的说,就是按三二一的顺序,一个不行就轮到下一个。

为什么可以这样也很简单。

比方说你减了三,如果你不减三,还是可以通过减一再减二达到,但次数增加了。

而且,用减一再减二的方法,可能还会命中陷阱。

因此,遵循:能用三就用三,不能就用二,还不能就用一,仍然不行就爆掉。

一百次后还不行,也爆掉。

对了,得特判一下开始就中陷阱的情况,也爆掉。

送上满分代码:

#include <iostream>
#include <cstdio>
using namespace std;
int n, g1, g2, g3;
void Error() 
{
	printf("NO\n");
	exit(0);
}
void OK()
{
	printf("YES\n");
	exit(0);
}
bool chk(int x) 
//判断是否可以执行一次步骤,即判断 n-x 是否可行。 
{
	int t = n - x;
	if (t < 0) return false;  //如果减后变负数了,当然爆掉。 
	if (t == g1 || t == g2 || t == g3) return false;
	return true;
}
int main()
{
	//注意输出时勿忘祖传换行。 
	scanf("%d%d%d%d", &n, &g1, &g2, &g3);
	if (!chk(0)) Error();  //特判原数为零。 
	for (int i = 1; i <= 100; i++)
	{
		if (chk(3)) n -= 3;
		else if (chk(2)) n -= 2;
		else if (chk(1)) n -= 1;
		else Error();  //如果都减不了,爆掉。
		if (n == 0) OK();
	}
	Error();   //一百次后还是没到零,爆掉。 
}

首发:2022-02-06 17:39:55

标签:g3,g2,g1,int,题解,d%,爆掉,AT916
来源: https://www.cnblogs.com/liangbowen/p/16622806.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有