解题思路:判断天平是否平衡运用的是重量乘以力矩,看左右结果是否相等,但是每一个天平的总重量为子重量和,与力矩无关!因为是递归输入,直接运用递归求解是最简洁的方式。注意理解题目递归的解法思路!
题目大意:
判断以下的所有天平是否平衡,输入为递归格式。

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;
}
递归解决天平平衡问题
本文介绍了一种使用递归方法来判断一系列天平是否处于平衡状态的算法。通过输入天平上对象的距离和权重,算法能有效地确定天平是否平衡,并详细解释了解题思路及实现代码。

被折叠的 条评论
为什么被折叠?



