#include <stdio.h>
#include<process.h>
int main(void)
{
FILE *fp;
int a[200], i, j, cnt, max, max_i;
fp = fopen("data.txt", "r");
if (fp == NULL) {
printf("file cannot open.\n");
exit(1);
}
for(i = 0; i < 200 && fscanf(fp, "%d", &a[i]) == 1; ++ i) ;
fclose(fp);
for(max = max_i = j = 0; j < i; ++ j){
int k;
for(cnt = 0, k = j + 1; k < i; ++ k)
cnt += (a[j] == a[k]);
if(cnt > max)
max = cnt;
max_i = j;
}
printf("%d\n", a[max_i]);
return 0;
}
これは「data.txt」というファイルから最頻値を探し出し、その値を表示するプログラムです。
しかし、このプログラムだと最頻値が1つしか表示できないので、
最頻値が複数ある場合でも、すべての最頻値の値を表示させるようなプログラムに書き換えてほしいです。
よろしくお願いします。
例)data.txt
30000
100
150
30000
30000
100
4320
100
出力↓
30000
100
No.4ベストアンサー
- 回答日時:
難しく考えすぎていたようです。
#include <stdio.h>
#include<process.h>
int main(void)
{
FILE *fp;
int a[200], i, j, cnt, max, max_i;
fp = fopen("data.txt", "r");
if (fp == NULL) {
printf("file cannot open.\n");
exit(1);
}
for(i = 0; i < 200 && fscanf(fp, "%d", &a[i]) == 1; ++ i) ;
fclose(fp);
for(max = max_i = j = 0; j < i; ++ j){
int k;
for(cnt = 0, k = j + 1; k < i; ++ k)
cnt += (a[j] == a[k]);
if(cnt > max)
max = cnt;
max_i = j;
}
//ここから追加
for(j = 0; j < i; ++ j){
int k;
for(cnt = 0, k = j + 1; k < i; ++ k)
cnt += (a[j] == a[k]);
if(cnt == max)
printf("%d\n", a[j]);
}
//ここまで追加
// printf("%d\n", a[max_i]);
return 0;
}
これだけの話でした。
No.3
- 回答日時:
No2 さっそく間違ってることに気が付きましたので訂正
>cnt[j] += cnt[k]; //cnt[j] ++でも同じだと思う
cnt[j] ++; //cnt[k]は未初期化だから ++じゃないとダメ
No.2
- 回答日時:
なるべく元の形を残して
for(cnt = 0, k = j + 1; k < i; ++ k) 以降と一部変数型変更
データ最大個数は200件 としています(元のソースがそうだから)
-------------実際の変更部分
int cnt[200];
for(cnt[j] = 1, k = j + 1; k < i; ++ k)
if(a[j] == a[k])
cnt[j] += cnt[k]; //cnt[j] ++でも同じだと思う
cnt[k] = 0; //なくてもいい気がする
}
for(j = 0; j < i; ++ j)
if(cnt[j] > max)
max = cnt[j];
for(j = 0; j < i; ++ j)
if(cnt[j] = max)
printf("%d\n", a[j]);
----------------------ここまで
return 0;
}
で動くんじゃないかな
ただし確認などは一切してないので間違ってたらゴメン
(参考程度にしてほかのまともな回答待ったほうがいいかも)
No.1
- 回答日時:
#include <stdio.h>
#include<process.h>
int main(void)
{
FILE *fp;
int a[200], i, j, cnt, max, max_i;
fp = fopen("data.txt", "r");
if (fp == NULL) {
printf("file cannot open.\n");
exit(1);
}
for(i = 0; i < 200 && fscanf(fp, "%d", &a[i]) == 1; ++ i) ;
fclose(fp);
// for(max = max_i = j = 0; j < i; ++ j){
// int k;
// for(cnt = 0, k = j + 1; k < i; ++ k)
// cnt += (a[j] == a[k]);
// if(cnt > max)
// max = cnt;
// max_i = j;
// }
// printf("%d\n", a[max_i]);
int b[200],c[200];
int k,m,n,p;
k=1;b[0]=a[0];c[0]=0;
for(j=0;j<i;j++){
for(p=0;p<k;p++){
if(a[j]==b[p]){
c[p]=c[p]+1;
break;
}
}
if(p==k){
b[k]=a[j];
c[k]=1;
k++;
}
}
for(m=0;m<k;m++){
for(n=m;n<k;n++){
if(c[m]<c[n]){
j=b[m];
b[m]=b[n];
b[n]=j;
j=c[m];
c[m]=c[n];
c[n]=j;
}
}
}
for(j=0;j<k;j++){
if(c[j]==c[0])
printf("%d-%d個\n", b[j],c[j]);
}
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ガンマ変換 C言語でプログラ...
-
c言語 ファイルから数字を読み...
-
ファイル出力で改行を入れたい!
-
fopenでファイル名に、変数を使...
-
テキストファイル内に対して, ...
-
辞書順にソートしたいのですが...
-
エラーがわかりません、、
-
C言語でファイル読み書きを早く...
-
ファイル読み込み EOF 判定
-
ファイルへの書込み処理が異常...
-
CSVファイルの内容を構造体に格...
-
C言語にてXMLファイルから任意...
-
二分探索木への挿入
-
バイナリファイルの読み込み(C...
-
C言語 csv 配列
-
ファイルに行番号を追加
-
バイナリファイルでの時刻表示
-
csvファイルのデータを構造体に
-
複数ファイルの同時読み込みの...
-
C言語のfor文です。 繰り返しの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
fgets( ) の返り値は何?
-
テキストファイル内に対して, ...
-
ファイルへの書込み処理が異常...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
C言語でセグメンテーションエ...
-
エラーがわかりません、、
-
ガンマ変換 C言語でプログラ...
-
自己相関関数を求めるプログラ...
-
VisualStudioでのファイルの入...
-
同時にファイル読み込み 書き込み
-
c言語 ファイルから数字を読み...
-
大量の入力ファイルを扱うとき...
-
ファイルが読み込めない・・・
-
【C言語】ファイルを読み込んで...
-
a*(1-exp(-bx))+cの近似の方法
おすすめ情報