- ベストアンサー
C言語のプログラムで最も頻繁に現れる数値を調べる方法
- C言語のプログラムで、ユーザーに20個の数値を入力させ、その中から最も頻繁に現れる数値を調べて表示する方法について解説します。
- まず、20個の数値を入力させるために、printf関数を使って「20個の数字を入力してください:」というメッセージを表示し、forループを使ってユーザーからの入力を受け取ります。
- 次に、forループを使って入力された数値の中から最も頻繁に現れる数値を調べます。モードとは、数値の中で最も頻繁に現れる値のことです。最初にモードを設定し、その数値の発生頻度を数えるためにネストしたforループを使います。各数値ごとに、その数値が他の数値と同じかどうかを比較し、同じ数値がある場合はカウントを増やします。その後、カウントが以前の最大カウントより大きければ、最も頻繁に現れる数値を更新します。最後に、モードを表示して処理を終了します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Debugしましょう。 oldcount = 0; /* モードを調べる */ for(i=0; i<20; i++) { mode = stats[i]; count = 1; modeとしてi=0一番最初の情報とする。 かつ、その数は1つはあるのでcount=1 /* この値の発生頻度を数える */ for(j=i+1; j<20; j++) if(mode==stats[j]) count++; i番目より後に同じ数がいくつあるか調べる。 みつかったら、count++する /* 以前の数より多ければ、新しいモードを使用する */ if(count>oldcount) { oldmode = mode; oldcount = count; } もし、countがoldcountを上回ったら現在のmode、countをoldを付けて保存しておく } これをjに関して繰り返す printf("モードは %d です\n", oldmode); oldmodeが幾つかを返す return 0; } 01234567 15676545 今私が適当に打った7個の番号で、答えは5となる事が期待されます。 i=0でmode=1 , count=1 j=i+1(=1),i+2(=2)...と数えていくと、1はこれ以上ないのでcount=1 今までで最多なのでoldmode=1、oldcount=1としておきます。 次にiのFor文が動き、i=1でmode=5,count=1 j=i+1(=2)...と数えていくと、5は合計2回出てくるので、最初の一回とあわせて3回count=3 oldcount<countなので、oldcount=3,oldmode=5として、次のiに向かう。 (以下略
お礼
回答ありがとうございます!! コードが何をしているか、ひとつひとつは分かるんですが、 全体で何をしているか分からなかったので質問しました。 回答末尾の具体例がとても分かりやすく、参考になりました。 回答ありがとうございました。