题目:点击打开链接
题目大意:让你判断天平是否平衡,四个数分别代表左子树的质量和力臂,右子树的质量和力臂。
思路见代码!!!
/*思路:输入本身就包含了递归,我们直接一边输入一边递归就可以了
递归思想是这样的:假设我们已经拥有了一个判断某个子天平是否平衡
的方法,称为solve()那么我判断一个天平是否平衡,可以使用这个方法
先判断它的左子天平是否平衡,再判断它的右子天平是否平衡,最后计算
W1D1=W2D2的公式是否平衡这里注意,我们在计算左右子天平是否平衡的同时,
要记录这两个子天平的总重量,分别存在W1,W2所以我们在函数中传递的是引用,
而不是值*/
#include<stdio.h>
int solve(int &W) //读入和处理同时进行
{ //变量不是从上往下传,而是从下往上传
int w1,d1,w2,d2;
int b1=1,b2=1;
scanf("%d%d%d%d",&w1,&d1,&w2,&d2);
if(!w1)b1=solve(w1); //递归求解左子树
if(!w2)b2=solve(w2);
W=w1+w2; //对于本层,递归没有意义,但为上一层传值
return b1&&b2&&(w1*d1==w2*d2);//从最里层往上得到结果
}
int main()
{
int t,w;
scanf("%d",&t);
while(t--)
{
if(solve(w))
printf("YES\n");
else
printf("NO\n");
if(t)
printf("\n");
}
return 0;
}