http://judge.u-aizu.ac.jp/onlinejudge/d ... 03&lang=jp
問題や、入力条件はリンク先に詳しく書いてありますので省略させていただきます。
プログラムは試行錯誤の上、このようになりました。
#include<stdio.h>
#include <stdlib.h>
main()
{
int *a,*b,*c,d,e;
scanf("%d",&d); //入力するデータセット数
/***********malloc関数で配列数を確保***********/
a = (int *)malloc(sizeof(int) * d);
b = (int *)malloc(sizeof(int) * d);
c = (int *)malloc(sizeof(int) * d);
if (a == NULL) exit(0);
if (b == NULL) exit(0);
if (c == NULL) exit(0);
/***********d個分のセットの値を入力************/
for(e=0;e<d;e++)
scanf("%d %d %d",&a[e],&b[e],&c[e]);
/**********************出力************************/
for(e=0;e<d;e++){
if( (a[e]*a[e]) + (b[e]*b[e]) == (c[e]*c[e]) )
printf("%s\n","YES");
else
printf("%s\n","NO");
}
}
最初、配列を a[10000] b[10000] c[10000] などと多めの配列をつくって、単純にforで入力のループと、出力のループを作ってみたのですが、ランタイムエラーなどと出力され、オンラインジャッジを通らなかったので、配列数を操作する方法が無いのか調べてみたところ、malloc関数というものを知り、挑戦してみました。
実行結果は、サイトのとおり、
3
4 3 5
4 3 6
8 8 8
この入力にたいして
YES
NO
NO
と出力されました。
データのセット数をなん十個に増やしても動作はしました…。
ですが、ジャッジを通りません…(汗;)
一体何が行けないのでしょうか
以前に、ジャッジをするのはPCだから、こういう記述は人間にしか理解できないから ~したほうが良い、といった感じのアドバイスを違う問題でうけたことがあるので、もしやそれと同じような事なのか…とも思っており、質問させていただきました。
学校の課題などでは有りませんので、解決を急いではおりません。
お時間のある方、大変お手数おかけしますが、ご協力いただけると幸いです。