どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

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