由于ZiP爆了老郭*狗的秘密,作为报复,老郭把ZiP的萌喵们都抓走啦。听到这个消息,ZiP立即赶往教主的老巢营救萌喵们。
已知老郭的老巢有一个n间的牢房,编号为1-n,每个房间里都有一个属于自己房间的特制组件,如果房门被打开,组件就能被拿到。而第i个房间的组件和第j个房间的组件可以拼出第i+j个房间或第i-j个房间的钥匙,组件可重复利用。
而ZiP发现他的大喵和二喵因为超能力足够强,已经基本毁坏了门锁,ZiP赶紧救出了他俩拿到了组件。
现在,ZiP想知道他能不能成功救出所有的喵。
Description
由于ZiP爆了老郭*狗的秘密,作为报复,老郭把ZiP的萌喵们都抓走啦。听到这个消息,ZiP立即赶往教主的老巢营救萌喵们。
已知老郭的老巢有一个n间的牢房,编号为1-n,每个房间里都有一个属于自己房间的特制组件,如果房门被打开,组件就能被拿到。而第i个房间的组件和第j个房间的组件可以拼出第i+j个房间或第i-j个房间的钥匙,组件可重复利用。
而ZiP发现他的大喵和二喵因为超能力足够强,已经基本毁坏了门锁,ZiP赶紧救出了他俩拿到了组件。
现在,ZiP想知道他能不能成功救出所有的喵。
Input
多组数据(不超过100组)
每行输入一个x和一个y(1<=x,y<=100000000),代表大喵和二喵被关的房间号
Output
每组输出一行,如果ZiP能救出所有喵,输出“Yes”,否则输出“No”
Sample Input
1 2
1 3
Sample Output
Yes
Yes
根据题意可知,大喵和二喵被关的房号(x和y)只要出现个1或者组合出一个1,就可以救出所有喵了,(因为有个1,另外的不管是任何数,都可以重复的加1、减1,就可以得到所有的房间号)。
比如输入为,2 8,解题:8-2=6; 6-2=4;4-2=2; 到这里发现最小的为2,所以输出应该为:No
输入为:11 19,解题:19-11=8; 11-8=3; 8-3=5; 5-3=2;3-2=1; 发现11和19可以得到1,所以输出应该为:Yes。
有了思路具体的代码就不难了,自己写写看吧。
思路不对,勿喷。
那我感觉,只要一个奇数一个偶数一定能得到1,就是Yes。两个偶数一定得不到1,就是No。
但是编写的代码还是wrong answer.
@xr肖睿: 那两个奇数呢?这个就得去判断了
@明Lam: 是的,正在想;
@明Lam: 看看我这个代码,哪里还有漏洞;
#include<stdio.h>
int main()
{
int s,t,x,y;
while(scanf("%d%d",&x,&y)!=EOF)
{
if(x%2==0&&y%2==0)
printf("No\n");
else if((x%2==0&&y%2!=0)||(x%2!=0&&y%2==0))
printf("Yes\n");
else if(x%2!=0&&y%2!=0)
{
if(x==1||y==1)
printf("Yes\n");
else if(x%y==0||y%x==0)
printf("No\n");
else printf("Yes\n");
}
}
return 0;
}
@xr肖睿: 刚发现 一个奇数 和 一个偶数 输出 Yes是不对的。比如:3 6 解:6-3=3;最小是3 不对。 你再看下规律,如果没找到规律,再用两个数相减的写法
@明Lam:
#include<stdio.h>
int main()
{
int s,t,a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
s=2;
if(a==b) {printf("No\n");continue;}
if(a<b){t=a;a=b;b=t;}
while(s!=0&&s!=1)
{
s=a-b;
if(b>=s){a=b;b=s;}
else {a=s;}
}
if(s==1) printf("Yes\n");
else printf("No\n");
}
return 0;
}
用这种方法一直显示超时