電子書籍の厳選無料作品が豊富!

http://judge.u-aizu.ac.jp/onlinejudge/descriptio …

この問題で、sample inputのデータを入力すると問題なく出力されるのですが、コードを提出するとなぜかWrong Answer となってしまいます。
どこがおかしいのか教えてください。。

#include<stdio.h>
#include<math.h>
int main(){
double x1,x2,x3,y1,y2,y3,p,q,r;
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
p = ((y1-y3)*(y1*y1-y2*y2+x1*x1-x2*x2)-(y1-y2)*(y1*y1-y3*y3+x1*x1-x3*x3))/(2*(y1-y3)*(x1-x2)-2*(y1-y2)*(x1-x3));
q = ((x1-x3)*(x1*x1-x2*x2+y1*x1-y2*x2)-(x1-x2)*(x1*x1-x3*x3+y1*y1-y3*y3))/(2*(x1-x3)*(y1-y2)-2*(x1-x2)*(y1-y3));
r = sqrt((x1-p)*(x1-p)+(y1-q)*(y1-q));
printf("%.3f %.3f %.3f\n",p,q,r);
}
return 0;
}

A 回答 (4件)

単純に「計算式が間違っている」です。




テストパターンとして
6
0.0 0.0 0.0 2.0 2.0 2.0
0.0 0.0 2.0 2.0 0.0 2.0
0.0 2.0 0.0 0.0 2.0 2.0
0.0 2.0 2.0 2.0 0.0 0.0
2.0 2.0 0.0 0.0 0.0 2.0
2.0 2.0 0.0 2.0 0.0 0.0
を使います。

(0.0 0.0) ( 0.0 2.0) (2.0 2.0)
これは、サンプルにあった座標と同じ外接円に接する三角形になります。
その座標を入れ替えた全6通りです。全て同じ三角形です。
ということは、サンプルと同じに
1.000 1.000 1.414
になるはずです
ですが、実際には違う値になります。


どこに間違いがあるか、探すのは面倒なのでやっていません。

直したら、いろんなパターンを入力して確認してみましょう。
中心(x0,y0) 長さr0 の円上の点(xa,ya) は
xa=x0+r0 * cos(Ta)
ya=y0+r0 * cos(Ta)
で求められます。
x0,y0,r0,Ta,Tb,Tc を乱数で決めれば、A,B,Cの3点の座標が求まります。
その順列全てを並べれば、テストパターンの完成です。
・全部の順列で答えが(ほぼ)同じ
・その答えが元のx0,y0,r0と(ほぼ)同じ
ということで確認することができます。
    • good
    • 0
この回答へのお礼

ありがとうございます、計算からやり直してみます。

お礼日時:2014/08/08 21:26

>scanf("%d",&n);


ここで何を入れましたか?

>Wrong Answer
これはプログラムを実行して表示されたものと違いますよね。
どこからどのように表示されたのですか?
    • good
    • 0

提出してWrong Answerと評価されるとしたら、割り算で除数が0になるケースを見てない、くらいかな?



除数が0になる、つまり、3点が直線状に並んでいる場合、除算は行ってはいけません。

あと、各値の範囲が指定されているけど、その範囲を逸脱している場合のエラーチェックもありません。

その辺りが「Wrong Answerと評価される理由」なんじゃないかな?
    • good
    • 0
この回答へのお礼

もう一度確認してみます。

お礼日時:2014/08/08 21:25

>Wrong Answer


プログラムにない文字は出ません。

>コードを提出すると
どう入力したのか書かないと検証できません。

この回答への補足

http://judge.u-aizu.ac.jp/onlinejudge/descriptio …
AOJのこの問題に、質問のコードを入力すると、Wrong Answerと返ってきてしまいます。

補足日時:2014/08/08 12:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!