hdu 2014 青年歌手大奖赛_评委会打分
题目描述
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Problem Description
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
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
题目难点
1. 使用数组
2. 调用函数
问题解答
#include <stdio.h>
int findMax(int[],int);//声明找到最大值的函数
int findMin(int[],int);//声明找到最小值的函数
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n<2 || n>100) continue;//如果n<2或n>100,则下面步骤全部跳过,再次输入n
int a[101],sum=0,Max,Min;
double ave;//平均值是double型的
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);//依次输入评分
sum+=a[i];//求所有分数的和(包括最高分和最低分)
}
Max=findMax(a,n);//得到最大评分
Min=findMin(a,n);//得到最小评分
ave=double(sum-Max-Min)/(n-2);//强行进行数据类型转化求平均分
printf("%.2lf
",ave);//注意精度
}
return 0;
}
int findMax(int a[],int n)
{
int t=0;//初始化最大值的下标为0
for(int i=0;i<n;++i)
{
if(a[i]>a[t]) t=i;//如果遍历数列,找到比假设最大值更大的数字,则更改下标为新找到的最大值的下标
}
return a[t];//返回找到的最大值
}
int findMin(int a[],int n)
{
int t=0;//初始化最小值的下标为0
for(int i=0;i<n;++i)
{
if(a[i]<a[t]) t=i;//如果遍历数列,找到比假设最小值更小的数字,则更改下标为新找到的最小值的下标
}
return a[t];//返回找到的最小值
}