设为首页 加入收藏

TOP

C选美比赛
2014-11-11 17:15:08 来源: 作者: 【 】 浏览:32
Tags:选美 比赛

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


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


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


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


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


  *问题分析与算法设计


  问题用程序设计语言加以表达的话,即为:将数组A中的整数从小到大进行连续编号,要求不改变数组中元素的顺序,且相同的整数要具有相同的编号。


  普通的排序方法均要改变数组元素原来的顺序,显然不能满足要求。为此,引入一个专门存放名次的数组,再采用通常的算法:在尚未排出名次的元素中找出最小值,并对具有相同值的元素进行处理,重复这一过程,直到全部元素排好为止。


  *程序说明与注释


  #include


  #define NUM 7 /*定义要处理的人数*/


  int a[NUM+1]={0,5,3,4,7,3,5,6}; /*为简单直接定义选手的分数*/


  int m[NUM+1],l[NUM+1]; /*m:已编名次的标记数组 l:记录同名次元素的下标*/


  int main()


  {


  int i,smallest,num,k,j;


  num=1; /*名次*/


  for(i=1;i<=NUM;i++) /*控制扫描整个数组,每次处理一个名次*/


  if(m[i]==0) /*若尚未进行名次处理(即找到第一个尚未处理的元素)*/


  {


  smallest=a[i]; /*取第一个未处理的元素作为当前的最小值*/


  k=1; /*数组l的下标,同名次的人数*/


  l[k]=i; /*记录分值为smallest的同名次元素的下标*/


  for(j=i+1;j<=NUM;j++) /*从下一个元素开始对余下的元素进行处理*/


  if(m[j]==0) /*若为尚未进行处理的元素*/


  if(a[j]


  {


  smallest=a[j]; /*则重新设置当 最小值*/


  k=0; /*重新设置同名次人数*/


  l[++k]=j; /*重新记录同名次元素下标*/


  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C数字移动 下一篇检测C++的内存泄漏用哪些工具

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: