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; }