お世話になっております。
初めに数字の入力回数を入力し、一番入力回数の多かった数字を出力するプログラムを作っています。
ほとんど完成しているのですが、一番入力回数が多かった数字が2つ以上ある時の出力方法がわかりません。
入力例
5
1
1
2
2
3
出力例
1 2
上記の例は1と2が2回ずつ入力されているので例のように両方を出力しなければならないのですが以下のプログラムだと1しか出力されません。
何かご教示お願いします。
int main(int argc, const char * argv[]) {
int i,n; int tmp_num = 0; int max_num = 1; int str[10]; //配列strの全要素をゼロで初期化 for( i=0;i<10 ;i++){ str[i] = 0; } scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&tmp_num); str[tmp_num]++; //回数をカウントする処理 } //入力された数字で最も多い数値を出力 for(i=1;i<10;i++){ if(str[max_num] < str[i]){ max_num = i; } } printf("%d",max_num); return 0; }
まず最も多い入力回数を求め、もう一度最初からループして入力回数が最大値と同じものをすべて出力すればいいと思います。
質問のコードでは 5 1 3 0 2 0 という入力に対して、もっとも多い 0 が出力されませんよ。
すみません、書き忘れましたが入力される数字は1以上100未満なので0が入力されることはないです。
アルゴリズムを書いても無視ということは、誰かがコード書いてくれるのを待っていますか?
int str[10]; なのに、99 を入力していいのですか?
for(i=1;i<100;i++){
if(str[max_num] < str[i]){
max_num = i;
}
}
for(i=1;i<100;i++){
if(str[max_num]==str[i]){
printf("%d %d",max_num,i);
}else{
printf("%d",max_num);
}
}
return 0;
}
しばらく考えてここまで修正してみたのですが、うまく出力されません。
あと確かにstr[10]はミスですね、すみません。str[99]に修正しました。
回答3件
あなたの回答
tips
プレビュー