UVa839-Not so Mobile (天平)
输入一个树状天平,根据力矩相等原则判断是否平衡。所谓力矩相等,就是W1D1=W2D2,其中W1,W2分别为左右两边砝码的重量,D为距离。
采用递归(先序)方式输入:每个天平的格式为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
import java.util.Scanner;
public class Test
{
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int num,w = 0;
num = cin.nextInt();//多个天平
while (num!=0)
{
num--;
if(slove(w))System.out.println("Yes");
else System.out.println("No");
}
}// main
//构造一个子天平,返回子天平是否平衡,参数w修改为子天平的总重量。
private static boolean slove(int w){
Scanner cin = new Scanner(System.in);
int w1,d1,w2,d2;
boolean b1=true,b2=true;
w1=cin.nextInt();
d1=cin.nextInt();
w2=cin.nextInt();
d2=cin.nextInt();
if(w1==0) b1=slove(w1);
if(w2==0) b2=slove(w2);
w=w1+w2;//子天平总重量。
return b1&&b2&&(w1*d1==w2*d2);
//只有子天平平衡,总天枰才会平衡。
}
}