質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

4180閲覧

入力した数字の出現回数をカウントする

seriko

総合スコア29

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/01/28 03:20

お世話になっております。
初めに数字の入力回数を入力し、一番入力回数の多かった数字を出力するプログラムを作っています。
ほとんど完成しているのですが、一番入力回数が多かった数字が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; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/01/28 04:00

まず最も多い入力回数を求め、もう一度最初からループして入力回数が最大値と同じものをすべて出力すればいいと思います。
kazuma-s

2020/01/28 04:28

質問のコードでは 5 1 3 0 2 0 という入力に対して、もっとも多い 0 が出力されませんよ。
seriko

2020/01/28 05:13

すみません、書き忘れましたが入力される数字は1以上100未満なので0が入力されることはないです。
Zuishin

2020/01/28 05:15

アルゴリズムを書いても無視ということは、誰かがコード書いてくれるのを待っていますか?
kazuma-s

2020/01/28 05:29

int str[10]; なのに、99 を入力していいのですか?
seriko

2020/01/28 06:12

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]に修正しました。
guest

回答3

0

C

1#include <stdio.h> 2 3#define N 100 4 5int main(void) 6{ 7 int i, n, max_count = 0, count[N] = { 0 }; 8 9 if (scanf("%d", &n) != 1) return 1; 10 while (--n >= 0) { 11 if (scanf("%d", &i) != 1 || i <= 0 || i >= 100) return 2; 12 if (++count[i] > max_count) max_count = count[i]; 13 } 14 for (i = 0; i < N; i++) 15 if (count[i] == max_count) printf("%d ", i); 16 putchar('\n'); 17 return 0; 18}

過剰なエラーチェックが入っているので、この通り書く必要はありません。
このコードを参考に、seriko さん自身のコードを書かかれることを希望します。

投稿2020/01/29 02:42

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ex.c

c

1#include <stdio.h> 2#include <stdlib.h> 3 4int main(int argc, const char * argv[]) { 5 6 int counts[] = 7 { 8 0, 0, 0, 0, 0, 9 0, 0, 0, 0, 0 10 }; 11 12 int data_num = 0; 13 int data = 0;; 14 15 scanf("%d", &data_num); 16 for (int i = 0; i < data_num; i++) { 17 scanf("%d", &data); 18 if ((0 <= data) && (data <= 9)) { 19 counts[data] += 1; 20 } 21 } 22 printf("--- データ入力が終了しました。\n"); 23 // for (int i = 0; i < 10; i++) { 24 // printf("%d:%d, ", i, counts[i]); 25 // } 26 // printf("\n"); 27 28 int max_count = -1; 29 for (int i = 0; i < 10; i++) { 30 if (max_count < counts[i]) { 31 max_count = counts[i]; 32 } 33 } 34 35 for (int i = 0; i < 10; i++) { 36 if (counts[i] == max_count) { 37 printf("%d ", i); 38 } 39 } 40 printf("\n"); 41 return 0; 42}

実行例
イメージ説明

追記:
”修了" -> "終了" にコード側だけを修正しました。

投稿2020/01/28 12:13

編集2020/01/30 17:13
katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Cのコードを書くならデバッグできる環境を整えましょう
Eclipseとか、WindowsならVisualStudioをインストールし、その上で実行させればどうでしょう。

コードの任意の行で実行を止め、変数のナカミを参照でき、1行づつ実行するということが出来ます
それで、どこでどうおかしくなるのか、というのを特定していきます

投稿2020/01/28 03:58

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問