課題3 解答例 (レベル3)
#include <stdio.h>
main()
{
int i, j, k;
for(i=1; i<=100; i++){
for(j=i; j<=100; j++){
for(k=j; k<=100; k++){
if(i*i + j*j == k*k){
printf("%d %d %d\n", i, j, k);
}
}
}
}
}
この改善点としては,
- ループの一番内側(つまり一番実行回数が多い)で i*i+j*j を
毎回計算しているのは無駄だから, 一つ外側のループ(ここで i と j は固定される)
で計算して, 別の変数にとっておけばよい
- そもそも sqrt(i*i+j*j) が整数になるかどうかがわかればよいわけで,
そうするとループは i と j の二重ですむ
prev
index