zoukankan      html  css  js  c++  java
  • UVA

    /*
      此题代码看似极其简短,但要理解,还是需要想比较久,考虑清楚代码的真正含义。
      
      值得重做,对于递归的理解很有帮助!
      
      该题最重要的部分是,递归输入;并且运用引用,使得在输入时,便可完成平衡的判断
      
      这题的引用的使用是否巧妙,值得好好体会,时不时重看!
    */


    #include <iostream>
    using namespace std;
    
    //输入一个子天平,返回天平是否平衡,参数W修改为子天平的总重量
    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; //其实如果只考虑最上层的天平,这步似乎没什么意义;但其实它的意义在于,在当前是递归到一个子天平的情况时,就要重新输入子天平所在处的左右天平,如果有了这句代码,参数 W1 或者 W2,最终就能变为子天平上的两个左右天平的总重量。如此,等到判断 D1 * W1 == D2 * W2时,W1 和 W2就都不会是0了,而是该子天平下所有子天平的总重量(如果有的话,没有子天平,就还是它本身的质量,总之不会是0,而是它自己或是自己所有子天平的重量) 
    	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;
    }


  • 相关阅读:
    函数作业1
    函数、装饰器、迭代器、内置方法总练习题
    疑问
    装饰器
    文件练习题1,2
    内置函数练习题和总结
    GET和POST请求的区别
    HTTP请求方法
    HTTP之状态码
    HTTP之响应消息Response
  • 原文地址:https://www.cnblogs.com/mofushaohua/p/7789401.html
Copyright © 2011-2022 走看看