1057 天平平衡
时间限制: 1 Sec 内存限制: 128 MB提交: - 解决: -
[ 提交][ 状态][ 讨论版]
题目描述
天平是一种衡器,是衡量物体质量的仪器。它依据杠杆原理制成,在杠杆的两端各有一小盘,一端放砝码,另一端放要称的物体,杠杆中央装有指针,两端平衡时,两端的质量(重量)相等。
现在递归地描述一个天平:
1.每个天平用两个正整数代表左右两端的质量。
2.如果左端或者右端的数字为0,代表这一端由子天平构成,那么在下一行描述这个子天平。
如:
0 0
0 2
1 1
2 2
代表天平:
一个天平平衡的条件:
1.天平的两端质量相同。
2.如果存在子天平,子天平平衡。
很显然上述天平是平衡的。
对于一个描述的天平,请判断是否达成平衡。
输入
每次测试只有一组数据。
给出一个天平,描述方式如上。
输出
如果所给天平平衡,输出“YES”,否则输出“NO”。
样例输入
0 0
0 2
1 1
2 2
样例输出
YES
非常经典的递归的啦
对于弱鸡的博主来说难度还是蛮大的
很长?三个递归.. 下面还有有个比较简单理解的 用一个递归就解决啦(琳姐提供的)后排膜
#include<stdio.h>
int flat;
int sum;
int f();
int main()
{
flat=0;
int x,y;
f();
if(flat==0){
printf("YES\n");
}
else printf("NO\n");
return 0;
}
int f()
{
int a,b;
int x,y;
scanf("%d%d",&x,&y);
if(x==0&&y==0){
a=f();
b=f();
sum=a+b;
if(a!=b)
flat=1;
}
if(x!=0&&y!=0){
a=x;
b=y;
sum=a+b;
if(a!=b)
flat=1;
}
else if(x!=0&&y==0){
a=x;
b=f();
sum=a+b;
if(a!=b)
flat=1;
}
else if(x==0&&y!=0){
a=f();
b=y;
sum=a+b;
if(b!=a)
flat=1;
}
return sum;
}
琳姐的
#include<stdio.h>
int f(int a){
if(a==0){
int x,y;
int flag=0;
scanf("%d%d",&x,&y);
if(x==0) x=x+f(x);
if(y==0) y=y+f(y);
if(x!=y) return -1;
else return (x+y);
}
else return a;
}
int main(){
int a,b;
scanf("%d%d",&a,&b);
a=f(a);
b=f(b);
if(a==-1||b==-1)printf("NO\n");
else if(a==b)printf("YES\n");
else printf("NO\n");
return 0;
}