树--天平问题
2016-03-07 17:43
295 查看
[b]题目:[/b]
输入一个树状天平,根据力矩相等的原则判断是否平衡。(力矩相等: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\n" : cout<<"NO\n"; if(t) cout<<'\n'; } return 0; }
相关文章推荐
- nginx安装
- lintcode-easy-Trailing Zeros
- javascript 获得上个月、获取下个月日期
- PHP汉字转拼音
- leetcode:Flatten Binary Tree to Linked List
- Layout
- 使用GUI工具高效构建你自己的Nuget包
- 多线程编程--- __thread关键字
- cocos2d-x开发的《派对小游戏》-github源码分享
- 【KMP模板】POJ3461-Oulipo
- JDK安装和配置
- java用三种方法实现阶乘n!
- Android Studio使用
- bananapi之BPI-D1镜像烧录
- C语言-基础
- Java学习心得
- DECIMAL Data Type Characteristics
- Java之Base64实现文件和字符串之间的转换
- 图片延迟加载技术
- java annotation注解学习,自定义注解