题意:输入一个树状的天平,利用杠杆原理,根据力矩是否相等(W1D1==W1D2)判断天平是否平衡
解题思路:1.由于判断天平是否平衡,当W1和W2都为0的时候,会先输入左子树,再输入右子树
2.此时的W1和W2会变成子树的重量之和,此时最好用到引用(同时改变传入参数的值)
3.递归的输入,并且判断子天平是否平衡
代码如下:
1 #include<stdio.h> 2 #include<iostream> 3 using namespace std; 4 bool input(int &W){ //引用,改变传入参数的值 5 int W1,W2,D1,D2; 6 int b1=true; 7 int b2=true; 8 scanf("%d%d%d%d",&W1,&D1,&W2,&D2); 9 if(W1==0){ //先左再右 10 b1=input(W1); 11 } 12 if(W2==0){ 13 b2=input(W2); 14 } 15 W=W1+W2; 16 return b1&&b2&&(W1*D1==W2*D2); 17 } 18 int main(){ 19 freopen("in.txt","r",stdin) 20 int n,w; 21 scanf("%d",&n); 22 while(n--){ 23 if(input(w)) 24 printf("YES\n"); 25 else 26 printf("NO\n"); 27 if(n) 28 printf("\n"); 29 } 30 return 0; 31 }
原文:http://www.cnblogs.com/muziqiu/p/7242380.html