hdu 2014 青年歌手大獎賽_評委會打分(陣列,呼叫函式,c語言)
阿新 • • 發佈:2018-11-16
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\n",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];//返回找到的最小值
}