UVa839-Not so Mobile (天平)

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);
		//只有子天平平衡,总天枰才会平衡。
	}
}

点赞