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);
	}
}


posted @ 2015-05-24 12:01  Tovi  阅读(140)  评论(0编辑  收藏  举报