解题思路:判断天平是否平衡运用的是重量乘以力矩,看左右结果是否相等,但是每一个天平的总重量为子重量和,与力矩无关!因为是递归输入,直接运用递归求解是最简洁的方式。注意理解题目递归的解法思路!
题目大意:
判断以下的所有天平是否平衡,输入为递归格式。
4个整数表示每个对象的距离和它们的权重,在格式:
WL DL WR DR
如果WL或WR是零,有一分移动挂在端和线以下定义子移动。在这种情况下,我们计算的子移动重量为其所有物体的重量的总和,无论电线串的重量。如果WL和WR是零以下行定义了两个子手机:先左后右。
Output
对于每一个测试案例,输出必须遵循下面的描述。连续两种情况下的输出将被一个空白行隔开。
如果手机处于平衡,输出“YES”,否则输出'NO'。
Sample Input
1
0 2 0 4
0 3 0 1
1 1 1 1
2 4 4 2
1 6 3 2
Sample Output
YES
#include<cstdio>
#include<iostream>
using namespace std;
bool solve(int &w) //w为某个天平整个的重量,因为使用了引用,可直接求出
{
int wl,dl,wr,dr;
bool a=true,b=true;
cin>>wl>>dl>>wr>>dr;
if(wl==0) a=solve(wl); //因为使用引用,可以在返回bool类型的同时改变wl的值,相当于返回了wl的值
if(wr==0) b=solve(wr); //递归得到子天平是否平衡的结论,同时得到子天平的质量!
w=wl+wr; //注意,这里wl与wr直接想加就行,天平的总重量就是重量和,与力矩无关!
return a&&b&&(wl*dl==wr*dr); //a,b代表左右子天平是否平衡
}
int main()
{
int T;
cin>>T;
while(T--)
{
int w=0;
bool ans=solve(w);
if(ans==true) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}