ソースコードの説明.
順位付け負のデータ版
ゴルフ(Golf)のスコアのように小さい値の方が順位高い場合の順位付けについて考える.
ゴルフのスコアの範囲を -20 ~ +36 とする. Cでは負の値を添字とする配列は認められないので, 次のようにスコアに対し添字をバイアス(bias:かたより)して考える.
Pascal構造化BASIC, FORTRAN77などでは, 配列の部分範囲指定ができるため, このようなバイアスは考えなくても良い, 部分範囲指定ができないのはCの欠点の一つ.
ソースコード
源文件
#include <stdio.h>
#define Num 10
#define Max 36
#define Min -20
#define Bias 1-(Min) /* 最小値を配列要素の1に対応させる */
int main(void){
int a[]={-3,2,3,-1,-2,-6,2,-1,1,5};
int i,juni[Max + Bias + 1];
for(i=Min + Bias; i<=Max + Bias; i++){
juni[i]=0;
}
for(i=0; i<Num; i++){
juni[a[i] + Bias]++;
}
juni[0]=1;
for(i=Min + Bias; i<=Max; i++){
juni[i] = juni[i] + juni[i-1];
}
printf("得点\t順位\n");
for(i=0; i<Num; i++){
printf("%d\t%d\n",a[i],juni[a[i] + Bias - 1]);
}
return 0;
}
|
実行結果
得点 順位
-3 2
2 7
3 9
-1 4
-2 3
-6 1
2 7
-1 4
1 6
5 10
|
各ホール(コース)でボールを打ち, 何回でホール(カップ)にボールを入れることができるかを競うスポーツ(遊び).
各ホールごとに標準打数(パー)が決まっていて, パー5, パー4, パー3などがる. 1ホールで, 標準打数より1打少なくホールインした場合をバーディ(-1)逆に1打多くホールインした場合をボギー(+1)と呼ぶ.
一般に18ホールの合計標準打数は72なので, 72で回ればスコアは0, 75打ならスコアは+3(3オーバー), 68打ならスコアは-4(4アンダー)となる.
Chapter1 @ 目録 @ HomeWork List @ 昭亮's Homepage