Uva839 Not so Mobile 【递归输入】【例题6-9】

    xiaoxiao2021-12-14  21

    题目:Not so Mobile

    题意:输入一个树状天平,根据力矩相等原则判断是否平衡。所谓力矩相等:就是WlDl = WrDr ,其中Wl和Wr分别为左右俩边砝码的重量,D为距离。

    输入时:当Wl或Wr为0时,表示该砝码实际是一个子天平,接下来会描述这个子天平。当Wl=Wr=0时,会先描述左天平,然后右天平。

    思路:输入时就直接采用先序递归输入,每次返回值为判断左树,右树和本身天平是否都保持平衡!

    代码:

    #include <iostream> #include <stdio.h> using namespace std; bool solve(int &W){ int W1,W2,D1,D2; bool b1 = true,b2 = true; 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 n,W; while(scanf("%d",&n)!=EOF) { while(n--){ if(solve(W)) printf("YES\n"); else printf("NO\n"); if(n) printf("\n"); } } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-970703.html

    最新回复(0)