6_9天平uva839
题目
代码及分析
这个递归不难理解,重点是要理解题目,仔细观察输入数据,动手画图,还原解题思路并将其运用到代码中去,理不清楚就多试几次。分析写在注释当中了:
#include<iostream>
using namespace std;
bool solve(int &W){//注意使用引用传递,将W本身改变
int W1,D1,W2,D2;
bool b1 = true,b2 = true;//左右子树是否平衡
cin>>W1>>D1>>W2>>D2;
if(W1 == 0)b1 = solve(W1);
if(W2 == 0)b2 = solve(W2);//W1、W2为0时,说明还有子天平,继续向下调用solve()
W = W1+W2;
return b1 && b2 &&(W1*D1 == W2*D2);//左右子天平都平衡,且它本身平衡时,返回true
}
int main(){
int T,W;
cin>>T;
while(T--){
if(solve(W))cout<<"YES\n";
else cout<<"NO\n";
}
}