[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>5問目

5問目(直角三角形判定)

問題

1000以下の3つの正の整数が入力されます。それぞれの長さを3辺とする三角形が直角三角形である場合はYES、そうでない場合にはNOを出力するプログラム。

入力


辺1(整数)
辺2(整数)
辺3(整数)

出力

YES または NO

入力例


3
4
5

出力例

YES

解き方例

これは「a*a + b*b = c*c」をabcを取り替えながら判定します。中学3年生でならうピタゴラスの定理です。

ソースコード

お持ち帰り

C/C++

#include <stdio.h>

int main(){
    int a,b,c;

    scanf("%d%d%d",&a,&b,&c);

    a*=a;
    b*=b;
    c*=c;

    if(a == b+c || b== a+c || c==a+b){
        printf("YES\n");
    }else{
        printf("NO\n");
    }

    return 0;
}



Java

import java.io.*;

class a05{
    public static void main(String args[])throws IOException{
        BufferedReader br =  new BufferedReader(new InputStreamReader(System.in));
        
        int a,b,c;
        a = Integer.parseInt(br.readLine());
        b = Integer.parseInt(br.readLine());
        c = Integer.parseInt(br.readLine());
        
        a*=a;
        b*=b;
        c*=c;
        
        if(a+b==c || b+c==a || c+a==b){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }
        
    }
}

VB.Net

Imports System

Module m

    Sub Main()
        Dim a, b, c As Integer


        a = Int32.Parse(Console.ReadLine())
        b = Int32.Parse(Console.ReadLine())
        c = Int32.Parse(Console.ReadLine())

        a *= a
        b *= b
        c *= c

        If a + b = c Or b + c = a Or c + a = b Then
            Console.WriteLine("YES")
        Else
            Console.WriteLine("NO")
        End If

    End Sub

End Module

その他

一応図形問題に分類されるでしょうが、初級問題なので解けるようになっておきましょう。あらかじめ全ての辺を2乗しておくと便利です、なお、sqrtは遅いのでこの方がプログラムも早く実行されます。パソコン甲子園ではどうでも良いことですが。

ただし、C言語で「math.h」を読み込む手間が省けますし、他の言語でも標準演算しか利用しないのでこの方がよいと私は思います。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-5-5 最終更新2006-5-9
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>5問目