网络知识 娱乐 c语言计算选美比赛

c语言计算选美比赛

题目要求:

在选美比赛的现场,有一批选手参加比赛,比赛的规则是最后得分越高,名次越低。当比赛结束时,要在现场按照选手的出场顺序(即选手的序号)宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。例如:

选手序号为: 1,2,3,4,5,6,7

选手得分为: 5,3,4,7,3,5,6

则输出名次为: 3,1,2,5,1,3,4

请编程帮助大赛组委会完成比赛的评分和排名工作。

需要掌握的知识是排序算法,可以去了解顺序排序、折半排序、快速、冒泡等,都是编程经常用到的知识点。

#include "stdio.h"nstruct player{n int num;n int score;n int rand;n} ;nnvoid sort(struct player psn[],int n){ntint i;ntprintf("num score rand n");ntfor(i=0;i<n;i++) //按分数排序n {n printf("%d%6d%6dn",psn[i].num,psn[i].score,psn[i].rand);n }n}nvoid sortScore(struct player psn[],int n) //按分数排序n{n int i,j;n struct player tmp;n for(i=0;i<n-1;i++)n for(j=0;j<n-1-i;j++)n {n if(psn[j].score>psn[j+1].score)n {n tmp = psn[j];n psn[j] = psn[j+1];n psn[j+1] = tmp;n }n }ntsort(psn,n);n}nnvoid setRand(struct player psn[],int n)//分配名次排序n{n int i,j=2;n psn[0].rand=1;n for(i=1;i<n;i++)n {n if(psn[i].score!=psn[i-1].score )n {n psn[i].rand=j;n j++;n }n elsen psn[i].rand=psn[i-1].rand;nn }ntsort(psn,n);n}nnvoid sortNum(struct player psn[],int n)//选手好排序n{n int i,j;n struct player tmp;n for(i=0;i<n-1;i++)n for(j=0;j<n-1-i;j++)n {n if(psn[j].num>psn[j+1].num)n {n tmp = psn[j];n psn[j] = psn[j+1];n psn[j+1] = tmp;n }n }n}nnvoid sortRand(struct player psn[],int n)n{n sortScore(psn,n); t/*以分数为关键字排序*/n setRand(psn,n); t/*按照分数排名次*/n sortNum(psn,n); t/*按照序号重新排序*/n}nnmain()n{n struct player psn[7]={{1,5,0},{2,3,0},{3,4,0},{4,7,0},n {5,3,0},{6,5,0},{7,6,0}};t/*初始化测试数据*/n int i;n sortRand(psn,7);n /*n printf("num score rand n");n for(i=0;i<7;i++)n {n printf("%d%6d%6dn",psn[i].num,psn[i].score,psn[i].rand);n }*/n sort(psn,7);n getche();n}n

运行结果:

c语言计算选美比赛

运行结果