在选美大奖赛的半决胜赛现场,有一批选手参加比赛,比赛的规则是最后得分越高,名次越低。当半决决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。例如:
选手序号: 1,2,3,4,5,6,7
选手得分: 5,3,4,7,3,5,6
则输出名次为: 3,1,2,5,1,3,4
#include <stdio.h>
int main()
{
int i;
int j;
int k;
int cont = 0;
int flag = 0;
int a[7]; //存储选手序号
int b[7] = {5, 3, 4, 7, 3, 5, 6}; //存储选手成绩
int c[7][7]; //成绩-历次成绩
int d[7]; //存储排名
printf("Player-No :\t");
for (i = 0; i < 7; i++)
{
a[i] = i + 1;
printf("%4d", a[i]);
}
printf("\n");
printf("Score : \t");
for (i = 0; i < 7; i++)
{
printf("%4d", b[i]);
}
printf("\n");
for (i = 0; i < 7; i++) //本次成绩减去历次成绩
{
for (j = 0; j < 7; j++)
{
c[i][j] = b[i] - b[j];
}
}
printf("Rank : \t\t");
for (i = 0; i < 7; i++)
{
cont = 1;
for (j = 0; j < 7; j++)
{
flag = 0;
if (c[i][j] > 0)
{
cont++;
for (k = j,flag = 0; k < 7; k++) /*此处为上次的成绩差开始,当两次成绩差相同时可以确定两次成绩相同,通过flag确认来避开相同成绩,达到相同成绩排名相同的作用*/
{
if (c[i][k] > 0)
{
if (c[i][j] == c[i][k])
{
flag++;
}
}
}
if (flag > 1)
cont--;
}
}
d[i] = cont;
printf("%4d", d[i]);
}
printf("\n");
return 0;
}