题目描述
白骨精是西游记中的妖怪,知道人类的弱点,在唐僧师徒一行西天取经的过程中三次变成人形接近唐僧,想吃唐僧肉,均被孙悟空识破。结果唐僧以为悟空误杀好人,赶走了悟空,悟空因此回了花果山,并叮嘱猪八戒和沙僧要照顾好唐僧。现在假设你和悟空正在与白骨精激战,悟空的金箍棒每次可以对白骨精造成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");
}
如有纰漏,请多多指正!!!