题目描述:
对于任意一点(x, y),假设只有两种移动方式:(x, y) ->(x, x + y) ,(x, y) -> (x + y, y)。给定起点坐标(x1, y1),判断是否可以只通过上述移动方式到达终点坐标(x2, y2)。例如起点坐标为 (2, 10),终点坐标为(26, 12),
则 (2, 10)->(2, 12)->(14, 12)->(26, 12) 是有效的移动方式,可以从起点到达终点。
提示:判断能否从(x1,y1)通过限定的两种移动方式移动到(x2,y2),可以转化为判断能否从(x1,x1+y1)通过限定的两种移动方式移动到(x2,y2)以及能否从(x1+y1,y1)通过限定的两种移动方式移动到(x2,y2)。
输入:
第一行为起点坐标,第二行为终点坐标。
输出:
如果可以通过上述移动方式到达终点,输出Yes.,否则输出No.
样例输入:
2, 10
26, 12
样例输出:
Yes.
#include <stdio.h>
int judge(int x,int y,int u,int v)
{
if(x==u&&y==v) return 1;
else if(x>u||y>v) return 0;
else return judge(x,x+y,u,v)+judge(x+y,y,u,v);
}
main()
{
int a,b,c,d;
scanf("%d,%d\n%d,%d",&a,&b,&c,&d);
if(judge(a,b,c,d)) printf("Yes.\n");
else printf("No.\n");
}