• ベストアンサー

c言語の問題ですが原因が?

問4  ij*ji=1300のiとjのうちiが最小のものを求める。ただし、iとjは一桁の整数 とする。(例:i=5、j=3の時、ij*jiは53*35である) ためしにプログラムを書きましたが #include<stdio.h> main(){ int a,i=10,j=10,min; while(i>=0){ i--; while(j>=0){ j--; a=(10*i+j)*(10*j+i); if(a!=1300) continue; min=i; } } printf("最小のiは、%d",min); } 最小のiは、2293488<------こんな感じになってしまいます。原因がわかる人がいたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

回答ではありませんが、最小の組み合わせを求めるんですから、i=10,j=10 と初期値を入れたらだめだと思います。 これでは最大の組み合わせが求められます。

その他の回答 (3)

回答No.4

再びNo.1です。 質問文のソースでは、せっかく中のループで回答が見つかっても、外のループの終了条件に引っかからないため、またループに入ってしまいます。 以下を参考にして下さい。 for(i=0;i<10;i++) { for(j=0;j<10;j++) { a=(10*i+j)*(10*j+i); if(a!=1300) { continue; } min=i; Flg = 1; break; } if (Flg==1) { break; } }

回答No.3

No.1のものです。 二重ループのうち、中のループは、 i=9 j=9,8,7・・・・・となり0で終了しますよね? Jが0になり、ループを出た後でも、jは10に戻さなければいけないんじゃないでしょうか? 今のままじゃ中のループを1度抜けると、もう2度と中のループには入りませんよ。

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

あてはまるiとjの組み合わせがなくて min=i; が実行されていないのでは。 minは初期値もないし...。