0582: Triangle Types

 

問題1

問題ページ

解き方

方針

与えられた三辺から三角形が存在するか確認する。

三角形の存在条件は、a + b > c, かつ b + c > a, かつ c + a > b

aが最大の辺の長さのとき、直角三角形、鋭角三角形、鈍角三角形の成立条件は以下の通りです。

  • 直角三角形 - a² = b² + c²
  • 鋭角三角形 - a² < b² + c²
  • 鈍角三角形 - a² > b² + c²

コードの説明

以下ソースコードの説明。

三辺が与えられたらソートし辺aが最大となるように割り当てる。

そして、triangle()に三辺を渡し三角形が存在するかどうか調べ、存在するならどのタイプの三角形か調べる。

三角形が存在しないときはそれ以降の入力を無視するので、存在しないときはエラーを起こすようにしている。

リストであるansの長さは3で直角、鋭角、鈍角の順でカウントされる。

ソースコードpython

def triangle(a, b, c):
    # 三角形が存在するか確認
    if a+b > c and b+c > a and c+a > b:
        # 直角三角形
        if a**2 == b**2 + c**2:
            return 0
        # 鋭角三角形
        elif a**2 < b**2 + c**2:
            return 1
        # 鈍角三角形
        elif a**2 > b**2 + c**2:
            return 2
    else:
        # 三角形が存在しない
        return 3

ans = [0] * 3
while True:
    try:
        a, b, c = sorted(map(int, input().split()))[::-1]
        ans[triangle(a, b, c)] += 1
    except:
        break
print(sum(ans), *ans)

関連リンク

Volume5まとめ -> Volume5