首页 新闻 搜索 专区 学院

能不能成功救出所有的喵。

0
悬赏园豆:30 [已解决问题] 解决于 2016-02-23 23:01

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
WUSTXIAO的主页 WUSTXIAO | 初学一级 | 园豆:123
提问于:2016-02-21 21:57
< >
分享
最佳答案
0

根据题意可知,大喵和二喵被关的房号(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。

有了思路具体的代码就不难了,自己写写看吧。

思路不对,勿喷。

收获园豆:30
明Lam | 小虾三级 |园豆:595 | 2016-02-23 11:17

那我感觉,只要一个奇数一个偶数一定能得到1,就是Yes。两个偶数一定得不到1,就是No。

但是编写的代码还是wrong answer.

WUSTXIAO | 园豆:123 (初学一级) | 2016-02-23 21:33

@xr肖睿: 那两个奇数呢?这个就得去判断了

明Lam | 园豆:595 (小虾三级) | 2016-02-23 21:45

@明Lam: 是的,正在想;

WUSTXIAO | 园豆:123 (初学一级) | 2016-02-23 21:47

@明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;
}

WUSTXIAO | 园豆:123 (初学一级) | 2016-02-23 21:54

@xr肖睿: 刚发现 一个奇数 和 一个偶数 输出 Yes是不对的。比如:3 6 解:6-3=3;最小是3 不对。 你再看下规律,如果没找到规律,再用两个数相减的写法

明Lam | 园豆:595 (小虾三级) | 2016-02-23 22:04

@明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;
}

用这种方法一直显示超时

WUSTXIAO | 园豆:123 (初学一级) | 2016-02-23 22:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册