杭电OJ 2014
这道题是求去掉最高值和最低值后的平均数。
第一种求法:
#include <stdio.h>
int main(void)
{
int n, i;
double min, max;
double x, y;
while (scanf("%d", &n) != EOF)
{
scanf("%lf", &x);
min = max = x;
for (i = 1 ; i < n ; i++)
{
scanf("%lf", &y);
x += y;
if (y > max) max = y;
if (y < min) min = y;
}
printf("%.2lf\n", (x - min - max) / (n - 2));
}
return 0;
}
这种求法是比较容易看。
第二种求法:
#include<stdio.h>
#include<math.h>
int cmp(const double *a, const double *b)
{
return *a > *b ? 1 : *a < *b ? -1 : 0; //考虑到代码稳定性,所以用这一段代码。
}
int main(void)
{
int n, i;
double x, y[100];
while (scanf("%d", &n) != EOF)
{
for (i = 0; i < n; i++)//控制输入的个数。
scanf("%lf", y+i);
qsort(y, n, sizeof(double), cmp);//自动将数组的最大值和最小值剔除;
for (x = 0, i = 1; i < n - 1; i++)//求出每一个剔除后总和。
x += y[i];
printf("%.2lf\n", x / (n - 2));
}
return 0;
}
这种求法调用了qsort函数。