a,b,cを総当たりで調べるそうです。
一応プログラム自体は動いたのですが結果が正しくありませんでした。
どなたか間違い箇所などを指摘してください。
お願いします><
6 #include<stdio.h>
7 int main( void ){
8 int i, a, b, c, ab, aa[30], bb[30], cc[30];
9 for(a=1; a<=30; a++){
10 for(b=1; b<=30; b++){
11 for(c=1; c<=30; c++){
12 ab=a*a+b*b;
13 if(ab=c*c){
14 aa[c-1]=a;
15 bb[c-1]=b;
16 cc[c-1]=c;
17 }
18 else{}
19 }
20 }
21 }
22 for(i=0; i<30; i++){
23 printf("%d,%d,%d\n", aa, bb, cc);
24 }
25 return 0;
26 }
直角三角形の値の求め方
Re: 直角三角形の値の求め方
C=25 の時
7,24と15,20の2つの組み合わせがありますが
C=25の値で配列にセットすると1組しかセットできません。
7,24と15,20の2つの組み合わせがありますが
C=25の値で配列にセットすると1組しかセットできません。
Re: 直角三角形の値の求め方
そもそも、cの値を配列の添字に使うという発想が間違い。
せっかく求めた(7,24,25)という解を(15,20,25)で上書きしてるんだから。
せっかく求めた(7,24,25)という解を(15,20,25)で上書きしてるんだから。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 直角三角形の値の求め方
わかりづらいので字下げした形で掲載します。
#include<stdio.h>
int main( void ){
int i, a, b, c, ab, aa[30], bb[30], cc[30];
for(a=1; a<=30; a++){
for(b=1; b<=30; b++){
for(c=1; c<=30; c++){
ab=a*a+b*b;
if(ab=c*c){ //ココが違う
aa[c-1]=a;
bb[c-1]=b;
cc[c-1]=c;
}
else{}
}
}
}
for(i=0; i<30; i++){
printf("%d,%d,%d\n", aa[i], bb[i], cc[i]);
}
return 0;
}
Re: 直角三角形の値の求め方
この問題、配列で記憶して後でまとめて書くこともできますが
そのようにする意味はあるのでしょうか?
a,b,cが条件を満たしていたらその場で出力してはいけないのでしょうか?
そのようにする意味はあるのでしょうか?
a,b,cが条件を満たしていたらその場で出力してはいけないのでしょうか?
Re: 直角三角形の値の求め方
もちろん、何も意味はないですね。まとめて出力するため「だけ」に、配列に入れているのですから。Tatu さんが書きました:そのようにする意味はあるのでしょうか?
まあ、ふつうはそうするでしょうね。Tatu さんが書きました:a,b,cが条件を満たしていたらその場で出力してはいけないのでしょうか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 直角三角形の値の求め方
Tatuさんが言っているようにわざわざ値を配列に保存して後でまとめて表示させる意味はないのではないでしょうか?
普通に値が出た時点で出力したほうがソースも見やすくてコンパクトになりますよ。
また、if(ab=c*c)についてですが、=が単体だと同等という意味ではなく、代入演算子になってしまいます。
同等のものを表す時は=を二つ並べてif(ab==c*c)とします。
下のソースでうまくいくはずです。
非常に基本的なところでの間違えがあるようなので、一応練習として、30の部分を指定した数にできるようにしてみてください。
スポイラーの中に解答例を書いておきます。
普通に値が出た時点で出力したほうがソースも見やすくてコンパクトになりますよ。
また、if(ab=c*c)についてですが、=が単体だと同等という意味ではなく、代入演算子になってしまいます。
同等のものを表す時は=を二つ並べてif(ab==c*c)とします。
下のソースでうまくいくはずです。
#include<stdio.h>
int main( void ){
int i, a, b, c, ab;
for(a=1; a<=30; a++){
for(b=1; b<=30; b++){
for(c=1; c<=30; c++){
ab=a*a+b*b;
if(ab==c*c){
printf("%d,%d,%d\n", a, b, c);
}
}
}
}
return 0;
}
スポイラーの中に解答例を書いておきます。
► スポイラーを表示