评委打分

评委打分

时间: 1ms        内存:128M

描述:

 一个歌唱比赛,比赛每次会从观众中随即抽取几名观众给分(观众至少有5个,分数为0~10分),由于观众感情色彩较重,不能像评委那般全部作数,所以赛方想出去掉2个最高分与2个最低分,剩下的取平均值作为一名选手的分数(分数取整,四舍五入),赛方无暇来做这个程序,于是来找你帮忙。

输入:

刚开始,输入T,表示有T名选手参赛,跟着一个数n,为抽取的n名评委,接下来n个数为各评委的评分。

输出:

输出第几名选手的平均分,每两名选手间有空行间隔(最后一名后没有)。

示例输入:

2
5 0 10 5 4 4
7 5 4 6 2 3 0 3

示例输出:

Num 1:4

Num 2:3

提示:

参考答案(内存最优[752]):

#include<stdio.h>
#include<math.h> 
int main()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	int T;
	int cases=0;
	scanf("%d",&T);
	while(T--)
	{
		int mark[1000]={0};
		int n;
		scanf("%d",&n);
		int i;
		int j;
		for(i=0;i<n;i++)
				scanf("%d",mark+i);
		for(i=0;i<n;i++)
			for(j=i+1;j<n;j++)
				{
					if(mark[j]<mark[i])
					{
						int temp=mark[i];
						mark[i]=mark[j];
						mark[j]=temp;
					}
				}
		int sum=0; 
		for(i=2;i<n-2;i++)
		{
			sum+=mark[i];
		}
		printf("Num %d:%.0lf\n",++cases,(double)sum/(n-4));
		if(T!=0)
			printf("\n");
	}
	return 0;
}

参考答案(时间最优[0]):

#include <iostream>
using namespace std;
int main()
{
	int t,n,arr[10001];
	int i,j,k,temp,num;
	double ave;

	cin>>t;
	for(i=1;i<=t;++i)
	{
		cin>>n;
		for(j=0;j<n;++j)
			cin>>arr[j];
	
		for(j=0;j<n-1;++j)
			for(k=j+1;k<n;++k)
				if(arr[j]>arr[k])
				{
					temp=arr[j];
					arr[j]=arr[k];
					arr[k]=temp;
				}

		ave=0;
		for(j=2;j<n-2;++j)
			ave+=arr[j];

		ave=ave/(n-4);

		if(i==t)
		{
			cout<<"Num "<<i<<":"<<int(ave+0.5);
			break;
		}
		cout<<"Num "<<i<<":"<<int(ave+0.5)<<endl<<endl;
	}
		
		


	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注