UVA - 839 - Not so Mobile

原命题链接:PDF/Vjudge

 题目中的意思是要程序去判断天平是否平衡,不一样的地方是,这里的天平托盘上有可能还存在子天平(输入的w为0时),也就是说要保证每一个天平都平衡,并且采用的是使用递归的方式,左面的优先判断。

 要使天平平衡,就要使天平上的每一个子天平都达到平衡状态,当不平衡的时候,所有的都不平衡。

 首先传入参数0,表示一开始没有天平,然后逐渐读入4个数字创建天平。

 当子天平存在时,优先判断左天平再去判断右天平。当子天平不再创建的时候,就将当前天平上的质量相加起来,再根据力矩去判断左右是否平衡(默认最小的天平是平衡的,防止出错)。

 返回值是当前天平和所有子天平的平衡状态。

下面是代码:

#include <bits/stdc++.h>

using namespace std;

bool judge(int & weight)
{
	int weight1, dis1, weight2, dis2;
	cin >> weight1 >> dis1 >> weight2 >> dis2;
	bool tree1 = true, tree2 = true;//表示一个子天平默认平衡,防止最小的天平判断出错
	if (!weight1)//left
		tree1 = judge(weight1);
	if (!weight2)//right
		tree2 = judge(weight2);
	weight = weight1 + weight2;//now judge
	//cout << weight << endl;
	return tree1 && tree2 && (weight1*dis1 == weight2 * dis2);
}

int main()
{
	//freopen("t.txt", "w", stdout);
	int CASE, temp = 0;
	cin >> CASE;
	while (CASE--)
	{
		if (judge(temp))
			cout << "YES" << endl;
		else
			cout << "NO" << endl;
		if (CASE)
			cout << endl;
	}
	//system("pause");
	return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值