二叉树特训:天平(UVA 839)递归的运用

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

题目大意:

判断以下的所有天平是否平衡,输入为递归格式。

 


 


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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值