有一堆评分。求一个评分,它与除自己外的其他评分的平均值差得最多。
思路:
对每个评分,求出其他评分的平均值。放在一个数组中。
在用一个数组来算,每个评分与其他评分的平均值的差,再取个绝对值。
循环一边第二个数组,求出差得最大的数。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double max(double num[], int length);
//评委个数
int n = 0;
scanf("%d", &n);
double *a = (double*)malloc(sizeof(double)*n);
for (int i = 0; i < n; i++)
{
scanf("%lf", &a[i]);
}
max(a, n);
free(a);
return 0;
}
double max(double num[],int length)
{
double *avg = (double*)malloc(sizeof(double)*length);
double *res = (double*)malloc(sizeof(double)*length);
double sum = 0;
int pos = 0;
for (int i = 0; i < length; i++)
{
sum += num[i];
}
//每个除开自己分数的平均数
for (int i = 0; i < length; i++)
{
*(avg + i) = (sum - num[i]) / (length - 1);
}
//求每个分数-其他分数平均数之差的绝对值
for (int i = 0; i < length; i++)
{
*(res + i) = fabs(*(num + i) - *(avg + i));
}
double max = res[0];
for (int i = 0; i < length; i++)
{
if (max < res[i])
{
max = res[i];
pos = i;
}
}
printf("与其他所有评分平均值差得最大的评分是%lf\n", num[pos]);
free(avg);
free(res);
return num[pos];
}