九度oj 题目1048:判断三角形类型
题目描述
给定三条边,请你判断一下能不能组成一个三角形。
如果能组成三角形,你还需要告诉我们它的类型:
- 等边三角形 Equilateral Triangle
- 等腰三角形 Isosceles Triangle
- 直角三角形 Right Triangle
- 普通三角形 Common Triangle
- 不能构成三角形 Not A Triangle
输入格式
输入数据首先包含一个整数T,表示测试数据组数然后是T组数据。每组数据占一行,包含三个正整数a,b,c (0 < a,b,c < 1,000,000)。
输出格式
对于每组数据,如果它们能组成一个三角形,请输出三角形的类型,否则请输出"Not A Triangle"。
样例
输入样例:
4
4 4 4
4 4 7
3 4 5
1 2 3
输出样例:
Equilateral Triangle
Not A Triangle
Right Triangle
Not A Triangle
解题思路
判断三角形类型,需要先判断它是否能构成三角形。对于三条边a,b,c的组合来说,能组成三角形的条件是:
- a+b>c
- a+c>b
- b+c>a
如果能构成三角形,则需要判断三角形的类型。根据定义可以分为以下几种:
- 等边三角形:三条边都相等
- 等腰三角形:仅有两条边相等
- 直角三角形:有一条边是直角边,即a²+b²=c²(a、b是直角边,c是斜边)
- 普通三角形:三条边不相等且不是直角三角形
需要注意的是,由于输入数据可能存在规律性,对于多组数据输入,需要每组数据输出后清空缓存。
代码实现
下面是用Python编写的解题代码:
import sys
def judge_triangle(a, b, c):
if a + b > c and a + c > b and b + c > a:
if a == b == c:
print("Equilateral Triangle")
elif a == b or a == c or b == c:
print("Isosceles Triangle")
elif a*a + b*b == c*c or a*a + c*c == b*b or b*b + c*c == a*a:
print("Right Triangle")
else:
print("Common Triangle")
else:
print("Not A Triangle")
if __name__ == "__main__":
T = int(input())
for i in range(T):
a, b, c = map(int, sys.stdin.readline().split())
judge_triangle(a, b, c)
# 清空缓存
sys.stdin.flush()
总结
本题需要判断三角形是否存在和判断三角形的类型,根据定义即可。
在多组数据输入时,需要及时清空缓存,避免缓存导致的错误答案。使用sys.stdin.flush()函数即可实现清空缓存的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:九度oj 题目1048:判断三角形类型 - Python技术站