
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
return 1L
-
C言語での引数の省略方法
-
C言語で分からないところがあり...
-
#define _CRT_SECURE_NO_WARNIN...
-
実数の整数部,小数部の取得
-
C言語で三目並べをするプログラ...
-
int16_t の _t は何?
-
systemの戻り値を取得する方法
-
if と配列の組み合わせ
-
部分行列の抜き出し(C言語)
-
acceptをalarmでタイムアウトさ...
-
C言語 等差数列問題
-
入力を待たずにstdinの監視をし...
-
C言語の関数で戻り値を返す必要...
-
反復処理
-
system関数がうまくいかない
-
異なる文字列のマッチングを、D...
-
フィボナッチ数列 プログラミ...
-
【C++】関数ポインタの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
複数桁10進数の*桁目だけを抽出...
-
return 1L
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
式は定数値が必要です」という...
-
数字列を3桁ごとにカンマで区切...
-
実数の整数部,小数部の取得
-
C言語でDxlibを使って3x3の奇数...
-
プログラムについて(UNIX)
-
acceptをalarmでタイムアウトさ...
-
C言語の課題です
-
エラー 添字が付けられた値が、...
-
CStringの配列要素を関数で受け...
-
最早開始時間と最遅完了時刻を...
-
入力された数字を大きい順に並...
おすすめ情報