からの継続です。
「学生について出席番号と試験の成績が入力として与えられるときに,成績に順位 をつけ,その順位と出席番号と成績を,成績が良い順に出力するプログラムを作成せよ。ただし,同じ成績の者は同じ順位とし,順位が i 番の者が x 人ならば 次の成績の者の順位は i+x であるとする。また,成績が同じ場合には,出席番号の小さい方を先に出力するものとする」
この問題を解いているのですが「同じ成績の者は同じ順位とし,順位が i 番の者が x 人ならば 次の成績の者の順位は i+x であるとする」という箇所の解き方が分かりません。現在は簡単に順位をつけるといった状態になっています。どこに何を入れたらよいのか教えてください。
#include <stdio.h>
#define MAXDATA 100
#define ATTEND 30
#define RANK 30
int main()
{
int d[MAXDATA];
int X;
int a[ATTEND];
int b[RANK];
int i, j, k;
int tmp;
printf("今回集計する人数を入力="); scanf("%d",&X);
for (i = 0; i < X; i++){
printf("試験の成績を入力してください。\n");
printf("%d 人目:",i+1);
scanf("%d", &d[i]);
printf("この人の出席番号を入力してください。\n");
scanf("%d" ,&a[i]);
}
printf("今回の試験順位(昇順)\n");
for(i=0;i < X-1; i++){
j=i;
for(k=i+1; k < X; k++){
if(d[j]<d[k]){ j = k; }
}
tmp = d[j];
d[j] = d[i];
d[i] = tmp;
tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}
for (i = 0; i < X; i++) {
printf("%d位.", i+1); printf("出席番号:%d ", a[i]); printf("点数:%d\n", d[i]);
}
}