2021-01-30


题目描述
现在有 n(n \le 1000)n(n≤1000) 位评委给选手打分,分值从 0 到 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 位小数。

输入格式

输出格式

输入输出样例
输入 #1复制
5
9 5 6 8 9
输出 #1复制
7.67

对于这题,我们的思路是:1)用一个数组存各个分数;2)找出max和min;3)对分数求和;4)求出平均数(记得减去max和min)

或者我们在第二部可以对分数数组递增排序,然后直接对从i=1到i=n-2进行求和

解法一

#include <stdio.h>

int main()
{
int a[1000],n;
double sum=0;--------------------注意数据类型是double
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);--------此处存分数
}
int max=0,min=10;
for(int i=0;i<n;i++)------------找max和min
{
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
for(int i=0;i<n;i++)----------求和
{
sum+=a[i];
}
sum=sum-max-min;---------------减去max和min
printf("%.2lf",sum/(n-2.0));
return 0;
}
解法二

#include <stdio.h>
#include <stdlib.h>

int main()
{
int a[1000],n,temp;
double sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int j=0;j<n-1;j++)----------递增排序
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(int i=1;i<n-1;i++)------------进行求和
{
sum+=a[i];
}
printf("%.2lf",sum/(n-2.0));
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值