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
#include <stdio.h>
int main() {
int n;
double s[100], sum, ave, t;
while (scanf("%d", &n) != EOF) {
sum = 0;
for (int k = 0; k < n; k++) {
scanf("%lf", &s[k]);
sum += s[k];
}
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - 1 - i; j++)
if (s[j] > s[j + 1]) {
t = s[j];
s[j] = s[j + 1];
s[j + 1] = t;
}
// for (int i = 0; i < n; i++)
// printf("%lf ", s[i]);
sum = sum - s[0] - s[n-1];
ave = sum / (n-2);
printf("%.2lf\n", ave);
}
return 0;
}
自己写的好像有点多。还排序了。
别人的代码:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#define INF 0x3f3f3f3f
int main(){
int n,i;
while(scanf("%d",&n)!=EOF){
int max=0,min=INF,sum=0,tmp;
for(i=0;i<n;i++){
scanf("%d",&tmp);
sum+=tmp;
if(max<=tmp)
max=tmp;
if(min>=tmp)
min=tmp;
}
sum=sum-max-min;
printf("%.2lf\n",sum*1.0/(n-2));
}
}
别人的解法:找到分别最大和最小的数,然后从总和中减去他们,再求平均数(不要排序)