[2021.11.22]UPC-2021级计算机2021随堂测验第五场21284 Problem H 三打白骨精

2023-10-31

题目描述

白骨精是西游记中的妖怪,知道人类的弱点,在唐僧师徒一行西天取经的过程中三次变成人形接近唐僧,想吃唐僧肉,均被孙悟空识破。结果唐僧以为悟空误杀好人,赶走了悟空,悟空因此回了花果山,并叮嘱猪八戒和沙僧要照顾好唐僧。现在假设你和悟空正在与白骨精激战,悟空的金箍棒每次可以对白骨精造成a点伤害值, 你的钉耙可以对白骨精造成b点伤害值,白骨精有c的血量,但是白骨精有一个技能,只要血量不是恰好减成0,它都不会死。比如白骨精的血量现在是10,你给它一个11的伤害,减成了-1,它会无视你这次伤害,但是如果给他一个10的伤害,它就挂了。现在问你,这一波打斗能否彻底打死白骨精。

输入

输入一行,包含三个整数a,b,c(1<=a,b<=100,1<=c<=10000)

输出

输出一行,如果这次战斗白骨精能被打死输出”Yes”,否则输出”No”.

样例输入 Copy

【样例1】
4 6 15
【样例2】
3 2 7
【样例3】
6 11 6

样例输出 Copy

【样例1】
No
【样例2】
Yes
【样例3】
Yes

关键的地方应该是要找到正确的方法...有很多同学的代码中默认了孙悟空和你(猪八戒)打的次数差值不超过1,然而事实上是有可能会出现孙悟空打三次,猪八戒打一次正好打死白骨精的情况的.....

实际上...训练赛中的青蛙跳和这个题都有着共性... 该题可以抽象为求函数 ax+by=c 有没有正整数解..其中x为孙悟空打的次数,y为猪八戒打的次数。

而青蛙跳则是两个函数有无x,y均为正整数的交点..

下面是我的代码 : )

#include <cstdio>
int main() {
   int a,b,c,x=0;
   scanf("%d %d %d",&a,&b,&c);  
   while(c-a*x>=0){            //每一个x都对应着一个确切的y,所以我们只需要穷举x就可以了。
       if((c-a*x)%b==0){     //y=(c-a*x)/b 当c-a*x小于0时,之后的y肯定都小于0了,说明无整数解
           printf("Yes");   
           return 0;
       }
       x++;
   }
   printf("No");
}

如有纰漏,请多多指正!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[2021.11.22]UPC-2021级计算机2021随堂测验第五场21284 Problem H 三打白骨精 的相关文章

随机推荐