UVA --839 Not so Mobile

来源:互联网 发布:八度网络刘传勇 编辑:程序博客网 时间:2024/06/05 18:31


题目:点击打开链接

题目大意:让你判断天平是否平衡,四个数分别代表左子树的质量和力臂,右子树的质量和力臂。

思路见代码!!!

/*思路:输入本身就包含了递归,我们直接一边输入一边递归就可以了递归思想是这样的:假设我们已经拥有了一个判断某个子天平是否平衡的方法,称为solve()那么我判断一个天平是否平衡,可以使用这个方法先判断它的左子天平是否平衡,再判断它的右子天平是否平衡,最后计算W1D1=W2D2的公式是否平衡这里注意,我们在计算左右子天平是否平衡的同时,要记录这两个子天平的总重量,分别存在W1,W2所以我们在函数中传递的是引用,而不是值*/#include<stdio.h>int solve(int &W)  //读入和处理同时进行{                   //变量不是从上往下传,而是从下往上传    int w1,d1,w2,d2;    int b1=1,b2=1;    scanf("%d%d%d%d",&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;    scanf("%d",&t);    while(t--)    {        if(solve(w))            printf("YES\n");        else            printf("NO\n");        if(t)            printf("\n");    }    return 0;}

原创粉丝点击