
#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ランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報