紫书题目-树状天平

输入一个树状的天平,根据力矩相等的原则判断这个天平是不是平衡的,这一题的输入时采用递归的方式进行的,每次输入一行四个数字,第一和第三用来判断这个节点是不是作为了树根,如果是0,那么说明下面还有一颗子树,如果不是0那么就是这个天平的力臂的大小。

 
这样的题目在一开始的时候我是完全蒙蔽的,一开始没有任何的思路啊,看了书之后才知道啊。因为这个题目的输入是按照递归的方法输入的,所以这里直接,一边输入一边计算。所谓的一边输入一边计算,是说,每次输入一行,判断第一个和第三个数字是不是0,如果是0,那么就先进行以这个节点为树根的子树的力矩的计算,先判断这颗子树是不是平衡的,如果这两个数字不是0,那么就直接的进行判断这棵树是不是平衡的,之后在进行下一行的输入。这样一直到全部都已经输入完成,最后判断这个函数是不是完成了,进行判断是不是输出YES还是NO
下面就是源代码
#include<iostream>
 
using namespace std;
 
bool solve(int &W)
{
    int W1,D1,W2,D2;
    bool b1=true,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==D2*W2);
}
int main()
{
    int T,W;
    cin>>T;
    while(T--)
    {
        if(solve(W)) cout<<"YES\n";
        else cout<<"NO\n";
        if(T) cout<<"\n";
    }
    return  0;
}
posted @ 2017-07-27 10:43  静静的逻辑  阅读(183)  评论(0编辑  收藏  举报