arrows blog

解いた問題などを適当に書いていきます。

AOJ 0003 Is it a Right Triangle?

問題概要

三角形の3辺の長さが与えられるので、これらを好きな辺に割り当てて直角三角形を作れるか判定し、
作れる場合、"YES"を作れない場合、"NO"を出力せよ。

制約

  • 1 ≤ 1辺の長さ ≤ 1000
  • データセットの数 ≤ 1000

解法

まず、3辺の長さを昇順(小さい順)にソートする(3つなのでif文などを使用するだけでもソートすることができる)。

3辺のうち、長さが小さい順にa, b, cとする。
後は、直角三角形の条件(a2 + b2 = c2)に当てはまるかどうかをチェックする。
当てはまる場合は、"YES"を、当てはまらない場合は、"NO"を出力する。

コード

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int N, a[3];
    cin >> N;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < 3; j++) {
            cin >> a[j];
        }
        sort(a, a + 3);
        cout << (a[0]*a[0] + a[1]*a[1] == a[2]*a[2] ? "YES" : "NO") << endl;
    }
    return 0;
}