算法刷题——天平(Uva 839)

  |   0 评论   |   0 浏览

1.题目描述

输入一个树状天平,根据力矩相等原则判断是否平衡。所谓力矩相等,就是W_lD_l = W_rD_r,其中W_lW_r分别为左右两边发吗的重量,D为距离。

15783828991.png

先输入天平的个数n。对于每个天平,采用递归(先序)方式输入:每个天平的格式为W_l, D_l , W_r, D_r,当W_lW_r为0时,表示该砝码是一个子天平,接下来会描述这个子天平。当W_l=W_r=0时,会先描述左子天平,后描述右子天平。

若天平平衡输出YES,否则输出NO。


样例输入

1
0 2 0 4
0 3 0 1
1 1 1 1
2 4 4 2
1 6 3 2

样例输出

YES


2. 问题分析

天平平衡需要满足三个条件:

  1. 左子天平平衡。
  2. 右子天平平衡。
  3. W_lD_l = W_rD_rW_l为左子天平(砝码)重量,W_r为右子天平(砝码)重量。

且输入也为递归,所以可以递归地按输入数据进行统计。


3. Mycode

#include <iostream>
/**
Date: 2020/1/5
Author: YC
*/
using namespace std;

int judge(bool &ok){
    int w1,d1,w2,d2;
    cin>>w1>>d1>>w2>>d2;
    if(!w1) w1 = judge(ok);
    if(!w2) w2 = judge(ok);
    if(w1*d1 != w2*d2) ok = 0;
    return w1 + w2;
}

inline void Do(){
    int k;bool ok;
    cin>>k;
    while(k--){
        ok = 1;
        judge(ok);
        if(ok) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
        if(k) cout<<endl;
    }
}
int main()
{
    Do();
    return 0;
}


标题:算法刷题——天平(Uva 839)
作者:YaoCheng8667
地址:https://ycisme.xyz/articles/2020/01/07/1578383989419.html