Uva 839 天平问题

点点圈 提交于 2019-12-02 06:45:32

题目描述:
Before being an ubiquous communications gadget, a mobilewas just a structure made of strings and wires suspendingcolourfull things. This kind of mobile is usually found hangingover cradles of small babies.The figure illustrates a simple mobile. It is just a wire,suspended by a string, with an object on each side.

It canalso be seen as a kind of lever with the fulcrum on the point where the string ties the wire. From thelever principle we know that to balance a simple mobile the product of the weight of the objects bytheir distance to the fulcrum must be equal. That is Wl × Dl = Wr × Dr where Dlis the left distance,Dr is the right distance, Wlis the left weight and Wr is the right weight.In a more complex mobile the object may be replaced by a sub-mobile, as shown in the next figure.In this case it is not so straightforward to check if the mobile is balanced so we need you to write aprogram that, given a description of a mobile as input, checks whether the mobile is in equilibrium ornot.

Input

The input begins with a single positive integer on a line by itself indicating the numberof the cases following, each of them as described below. This line is followed by a blankline, and there is also a blank line between two consecutive inputs.The input is composed of several lines, each containing 4 integers separated by a single space.The 4 integers represent the distances of each object to the fulcrum and their weights, in the format:Wl Dl Wr DrIf Wl or Wr is zero then there is a sub-mobile hanging from that end and the following lines definethe the sub-mobile. In this case we compute the weight of the sub-mobile as the sum of weights ofall its objects, disregarding the weight of the wires and strings. If both Wl and Wr are zero then thefollowing lines define two sub-mobiles: first the left then the right one.

Output

For each test case, the output must follow the description below. The outputs of twoconsecutive cases will be separated by a blank line.Write ‘YES’ if the mobile is in equilibrium, write ‘NO’ otherwise.

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

解题思路:
这可以说是一道模板题。首先这道题的输入就采用的是递归方式,因此很自然的就想到用递归函数,一层一层判断就可以了

AC代码:

#include<iostream>
using namespace std;
//输入一个子天平,返回子天平是否平衡,参数w修改为子天平的总重量
bool solve(int& w)
{
	int w1,d1,w2,d2;
	bool b1 = true;
	bool b2 = true;
	cin >> 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;
	cin >> t;
	while(t--)
	{
		if(solve(w))
		  cout << "YES" << endl;
		else
		  cout << "NO" << endl;
		if(t)
		  cout << endl;
	}
	return 0;
}

//天平 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!