评委打分
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
