求改正,结果对了,只有二十分

B2095 白细胞计数

szpszp123 @ 2024-12-25 19:59:16

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double calaver(double number[],int n,double max,double min){
    double sum=0;
    for(int i=0;i<n;i++){
        if(number[i]!=max&&number[i]!=min){
                sum+=number[i];
    }
    }
    return sum/(n-2);
}
double calerror(double number[],double max,double min,int n,double aver){
    double e=0;
    for(int i=0;i<n;i++){
        if(number[i]!=max&&number[i]!=min){
            double l=fabs(number[i]-aver);
            if(l>e){
                e=l;
            }
        }
    }

    return e;
}
int main(){
    int n;
    scanf("%d\n",&n);
    double number[n];
    for(int i=0;i<n;i++){
        scanf("%lf\n",&number[i]);
    }

double max=number[0];double min=number[0];
    for(int i=1;i<n;i++){
        if(number[i]>max)
            max=number[i];
        if(number[i]<min)
            min=number[i];
    }
    double aver=calaver(number,n,max,min);
    double error=calerror(number,max,min,n,aver);
    printf("%.2lf %.2lf",aver,error);
    return 0;
}

这个错在哪里啊,我在自己的编译器上试了,结果是对的啊


by zhangsiyu2304 @ 2024-12-25 20:23:36

找最大最小值的循环变量要从i=0开始


by mcbm @ 2024-12-25 21:41:47

@zhangsiyu2304,for的条件是i<n,所以没问题。


|