
A 回答 (1件)
- 最新から表示
- 回答順に表示

No.1
- 回答日時:
以下のようにしてください。
不明点は補足にて質問してください。乱数は現在時刻を種として設定しています。(でないと毎回同じ乱数が出現するので)
名前は1文字でなく、10文字まで使用できるようにしました。(%10sの書式を尊重しました)
---------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
main()
{
unsigned char x;
int w,n,i,j;
int count[8];
int skipFlag[8];
char name[8][11]={"AAA","BBB","CCC","DDD","EEE","FFF","GGG","HHH"};
int rank[8];
int maxcount;
int maxindex;
for(n=0;n<8;n++)
{
count[n]=0;
skipFlag[n]=0;
}
srand(time(NULL)); //乱数の種を与える(種は現在時刻)
for(i=1;i<=100;i++)
{
x=rand()%8;
count[x]++;
}
//countの中から最大の値をもつ位置(添え字)を探す
//それを8回繰り返す(1位から8位まで探す)
for(i=0;i<8;i++)
{
maxcount = -1; //最大値に-1を設定(初期値)
for(j=0;j<8;j++)
{
if (skipFlag[j] == 1) continue; //既に最大になった箇所はスキップ
if (count[j] > maxcount){
maxcount = count[j]; //最大値を更新
maxindex = j; //最大値の添え字を記憶
}
}
//最後に最も大きい値の添え字が記憶されているのでそれを格納
rank[i] = maxindex;
//最大になった箇所は、次回使用しないようにするため1をセット
skipFlag[maxindex] = 1;
}
printf("----------------------\n");
for(i=0;i<8;i++)
{
w = rank[i];
printf("第%d位%3d回%10s\n",i+1,count[w],name[w]);
}
printf("----------------------\n");
}
---------------------------------------
以下、実行結果です。
1回目
----------------------
第1位 18回 AAA
第2位 16回 FFF
第3位 13回 BBB
第4位 13回 EEE
第5位 11回 DDD
第6位 10回 CCC
第7位 10回 GGG
第8位 9回 HHH
----------------------
2回目
----------------------
第1位 18回 FFF
第2位 13回 AAA
第3位 13回 BBB
第4位 12回 CCC
第5位 12回 GGG
第6位 11回 EEE
第7位 11回 HHH
第8位 10回 DDD
----------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- Excel(エクセル) 非表示にしたい行をグループ化して折り畳み 4 2022/09/17 20:17
- その他(言語学・言語) 外国語問題 1 2022/07/21 15:21
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- その他(言語学・言語) ピダハン語 2 2022/07/14 12:41
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- 数学 【 数A 順列 】 問題 A,B,C,D,E,F,Gの7人が1列に並ぶとき, A,Bの2人が間に2人 4 2022/06/19 12:48
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
(int *)の意味
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
C++でvectorにテキストファイル...
-
int型の変数値をバイト列として...
-
数字列を3桁ごとにカンマで区切...
-
「{ } で囲むだけ」は正しい?
-
C言語初心者です、、、お助けく...
-
C言語
-
ラップ関数とはどんなものですか?
-
(マルチスレッド)_beginthrea...
-
C言語でDxlibを使って3x3の奇数...
-
C言語について教えてください。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
int型の変数値をバイト列として...
-
std::set<int> で、ある値が何...
-
PowerShellがうまくいかない
-
(int *)の意味
-
CStringの配列要素を関数で受け...
-
ColorをRGBで指定する方法
-
「{ } で囲むだけ」は正しい?
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
read関数をノンブロッキングで...
-
(マルチスレッド)_beginthrea...
-
int16_t の _t は何?
おすすめ情報