C趣味编程百例(32)选美比赛

文章作者 100test 发表时间 2007:03:10 17:34:56
来源 100Test.Com百考试题网


96.选美比赛
在选美大奖赛的半决胜赛现场,有一批选手参加比赛,比赛的规则是最后得分越高,名次越低。当半决决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。例如:
选手序号: 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:记录同名次元素的下标*/
void 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. /*重新记录同名次元素下标*/
}
else if(a[j]==smallest) /*若与当前最低分相同*/
l[ k]=j. /*记录同名次的元素下标*/
for(j=1.j<=k.j ) /*对同名次的元素进行名次处理*/
m[l[j>=num.
num . /*名次加1*/

相关文章


C趣味编程百例(31)兎子产子
Access键盘快捷键大全[上]
全国计算机等级考试报考简章
C趣味编程百例(32)选美比赛
全国计算机等级考试(NCRE)调整
C趣味编程百例(31)将阿拉伯数字转换为罗马数字
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛