• 树--天平问题


    题目:

      输入一个树状天平,根据力矩相等的原则判断是否平衡。(力矩相等:W1D1 = W2D2)

    输入:

      采用递归输入:每个天平的格式为w1,d1,w2,d2 ,当w1或w2为0时,表示改砝码是一个子天平。当w1,w2为0时,先描述左子天平,然后描述右子天平

      例:

      1

      0 2 0 4

      0 3 0 1

      1 1 1 1

      2 4 4 2

      1 6 3 2

    输出:

      “YES或“NO”(输入样例正确输出为“YES”)

    既然是递归输入,那就顺着他递归去动态输入然后判断就好了。。

    如果输入当前w1为0,说明它下面有子天平,就递归到下一层,直到w1不再为0,判断,返回是否正确,如此一步步递归最后得出结果。很容易看出,下面程序里的return,返回的是当前步的结果和上一步的结果,如果天平中有一个天平不平衡,那么以上所有的返回就都是false,到最后直接判断输出就好了。。

     

    //天平(Not so Mobile, UVa 839)
    
    #include<iostream>
    #include<cstdio>
    
    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 == w2 * d2);/*这里的&&顺便返回了上一步的正确与否的状态,所以只要一步是false,所有返回就都为false*/
    }
    
    int main()
    {
    	int t, w;
    	cin >> t;
    	while(t--){
    		solve(w) ? cout<<"YES
    " : cout<<"NO
    ";
    		if(t) cout<<'
    ';
    	}
    	return 0;
    }
    

      

     

  • 相关阅读:
    001 windows下如何生成公钥和私钥
    函数基础
    各种推导式
    MySQL误删数据
    kafka 学习笔记
    Nginx 功能
    Nginx 到底可以做什么
    Nginx 到底可以做什么
    Shell的18条常用命令整理
    超详细 Nginx 极简教程
  • 原文地址:https://www.cnblogs.com/zhangone/p/5251327.html
Copyright © 2020-2023  润新知