题目要求:
在选美比赛的现场,有一批选手参加比赛,比赛的规则是最后得分越高,名次越低。当比赛结束时,要在现场按照选手的出场顺序(即选手的序号)宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。例如:
选手序号为: 1,2,3,4,5,6,7
选手得分为: 5,3,4,7,3,5,6
则输出名次为: 3,1,2,5,1,3,4
请编程帮助大赛组委会完成比赛的评分和排名工作。
需要掌握的知识是排序算法,可以去了解顺序排序、折半排序、快速、冒泡等,都是编程经常用到的知识点。
#include "stdio.h"
struct player{
int num;
int score;
int rand;
} ;
void sort(struct player psn[],int n){
int i;
printf("num score rand
");
for(i=0;ipsn[j+1].score)
{
tmp = psn[j];
psn[j] = psn[j+1];
psn[j+1] = tmp;
}
}
sort(psn,n);
}
void setRand(struct player psn[],int n)//分配名次排序
{
int i,j=2;
psn[0].rand=1;
for(i=1;ipsn[j+1].num)
{
tmp = psn[j];
psn[j] = psn[j+1];
psn[j+1] = tmp;
}
}
}
void sortRand(struct player psn[],int n)
{
sortScore(psn,n); /*以分数为关键字排序*/
setRand(psn,n); /*按照分数排名次*/
sortNum(psn,n); /*按照序号重新排序*/
}
main()
{
struct player psn[7]={{1,5,0},{2,3,0},{3,4,0},{4,7,0},
{5,3,0},{6,5,0},{7,6,0}}; /*初始化测试数据*/
int i;
sortRand(psn,7);
/*
printf("num score rand
");
for(i=0;i<7;i++)
{
printf("%d%6d%6d
",psn[i].num,psn[i].score,psn[i].rand);
}*/
sort(psn,7);
getche();
}
运行结果:
运行结果
留言与评论(共有 0 条评论) “” |