这周我学到了数组的排序,看到2014题就用上了,真的是方便。
题目:
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
Input
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。
Output
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。
这道题的难度不大,我主要是用了数组的排序,就想发一下笔记。
Sample Input
3 99 98 97
4 100 99 98 97
Sample Output
98.00
98.50
下面是我的源代码:
#include <stdio.h>
main()
{
int a[100];
int n,i,j,temp;
double score=0.00;
while(scanf("%d",&n)!=EOF)
{
if(n>2&&n<=100)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);//将评委的分数放进数组里
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)//将数组里的分数按由小到大排列
{
if(a[j+1]<a[j])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
score=0.00;
for(i=1;i<n-1;i++)
{
score=a[i]+score;//去掉最高分和最低分,求总分
}
score=score/(n-2);//求平均分
printf("%.2lf\n",score);
}
}
}
小结:1.数组的排序主要有冒泡法和选择法,我这里使用的是冒泡法,算是很常用的方法;
2.冒泡法就是一个个的比较,小的上升,大的下沉;
3.当数值小时,就通过中间值来交换两者的位置。