题目链接:https://vjudge.net/problem/UVA-839
题目大意:输入一个树状天平,根据力矩相等原则,判断是否平衡。 如上图所示,所谓力矩相等,就是Wl*Dl=Wr*Dr。 其中Wl和Wr分别为左右两边砝码的重量,D为距离
采用递归的方式输入:每个天平的格式为Wl,Dl,Wr,Dr 当Wl或Wr为0时 表示该"砝码" 实际是一个子天平 接下来会描述这个子天平。当Wl=Wr=0 会先描述左子天平 然后是右子天平。
思路:解决本道题之前一定要先弄请吃题目意思,建议读者把样例输入画出来。。。
这道题的输入就采用了递归的方式定义,因此编写一个递归过程进行输入比较。 事实上 在输入过程就可以完成判断, 由于使用引用传值 代码非常精简。 本题极为重要 一定要搞懂!!!
其实很容易想到的,子天平的重量要由它下面的砝码传递上来,使用引用传递真的很方便,通过这题,也算开阔了自己对引用的视野 以前从来没有使用过引用,这也算第一道引用的题了
看代码:
#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==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; }