《C/C++/Java/Pascal 程序设计基础》习题集之分支-02. 三角形判断(15)

分支-02. 三角形判断(15)

给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。

输入格式:

输入在一行中顺序给出6个[-100, 100]范围内的数字,即3个点的坐标x1, y1, x2, y2, x3, y3。

输出格式:

若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。

输入样例1:
4 5 6 9 7 8
输出样例1:
L = 10.13, A = 3.00
输入样例2:
4 6 8 12 12 18
输出样例2:
Impossible
代码实现:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.DecimalFormat;

/**
 * @ClassName: Main
 * @author: ybl
 * @date 2014-9-6 下午3:30:32
 * 
 */
public class Main {
	static class Point {
		float x;
		float y;
	}

	private static boolean checkValid(Point p1) {
		if (p1.x >= -100 && p1.x <= 100 && p1.y >= -100 && p1.y <= 100) {
			return true;
		}
		return false;
	}

	private static double getLength(Point p1, Point p2) {		
		return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));		
	}
	
	public static void main(String[] args) {		
		Point p1 = new Point();
		Point p2 = new Point();
		Point p3 = new Point();

		while (true) {
			BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
			try {
				String aString = reader.readLine();
				boolean result = false;
				String space = " ";
				if (aString != null && aString.contains(space)) {
					String[] aStrings = aString.split(space);
					if (aStrings != null && aStrings.length == 6) {
						try {
							p1.x = (Float.parseFloat(aStrings[0]));
							p1.y = (Float.parseFloat(aStrings[1]));
							p2.x = (Float.parseFloat(aStrings[2]));
							p2.y = (Float.parseFloat(aStrings[3]));
							p3.x = (Float.parseFloat(aStrings[4]));
							p3.y = (Float.parseFloat(aStrings[5]));
							if (checkValid(p1) && checkValid(p2) && checkValid(p3)) {
								result = true;
							}
						} catch (Exception e) {
							// TODO: handle exception
						}
					}
				}
				if (result) {
					break;
				} else {
					System.out.println("Input error!Please try again...");
					continue;
				}
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
		
		double l1 = getLength(p1, p2);
		double l2 = getLength(p1, p3);
		double l3 = getLength(p2, p3);
		if(l1+l2<=l3 || l1+l3<=l2 || l2+l3<=l1){
			System.out.println("Impossible");
		} else {
			String L;
			DecimalFormat df = new DecimalFormat("##0.00");
			L = df.format(l1 + l2 + l3);
			float A = (float) (0.5*(p1.x*p2.y+p2.x*p3.y+p3.x*p1.y-p1.x*p3.y-p2.x*p1.y-p3.x*p2.y));
			System.out.println("L = " + L + ", " + "A = " + df.format(Math.abs(A)));	
		}
		
	}
}


 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值