HDU--2014
青年歌手大奖赛_评委会打分
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 57800 Accepted Submission(s): 28862
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
Author
lcy
#include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; int main() { int n; double a[105]; memset(a,0,105); while (cin >>n) { for (int i=0; i<n; i++) { cin >>a[i]; } double max=a[0], min=a[0]; for (int i=0; i<n; i++) { if (a[i]<min) min = a[i]; if (a[i]>max) max = a[i]; } double num=0; for (int i=0; i<n; i++) { if (a[i]!=max && a[i]!=min) { num = num+ a[i]; } } double result; result= (double) num / (n-2); printf("%.2lf\n",result); } return 0; }
另外在discuss里面看到的比较精简的
#include <stdio.h> #include <stdlib.h> int cmp(const void *a,const void *b) { return *(double *)a > *(double *)b ? 1 : -1; } int main() { int n,i; double a[100],aver; while(scanf("%d",&n)!=EOF) { aver=0; for(i=0;i<n;i++) { scanf("%lf",&a[i]); aver+=a[i]; } qsort(a,n,sizeof(a[0]),cmp); aver=(aver-a[0]-a[n-1])/(n-2); printf("%.2lf\n",aver); } }