求指点

B2095 白细胞计数

kda_1111 @ 2022-08-29 15:55:03

#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
int main()
{
    double x,y,z,u;
    int n;
    z=0;
    cin>>n;
    double a[n];
    for(int i=0;i<n;++i)
    {
        cin>>a[i];
    }
    x=y=a[0];  
    for(int j=0;j<n;++j)
    {
        if(a[j]>x)
        x=a[j];
    }
    for(int h=0;h<n;++h)
    {
        if(a[h]<y)
        y=a[h];
    }
    for(int v=0;v<n;++v)
    {
        z=z+a[v];
    }
    u=fabs((z-x-y)/(n-2)-a[0]);
    for(int b=0;b<n;++b)
    {
        if(x!=a[b]||y!=a[b]||u>fabs((z-x-y)/(n-2)-a[b]))
        {u=fabs((z-x-y)/(n-2)-a[b]);}
    }
    printf("%.2f %.2f",(z-x-y)/(n-2),u);
    return 0;
}

by WZWZWZWY @ 2022-08-29 16:45:47

我改成了如下代码:

#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
int main()
{
    double x,y,z=0,u;
    int n;
    cin>>n;
    double a[n];
    for(int i=0;i<n;++i)
    {
        cin>>a[i];
    }
    x=y=a[0];
    for(int j=0;j<n;++j)
    {
        if(a[j]>x)
        x=a[j];
        if(a[j]<y)
        y=a[j];
        z+=a[j];
    }
    u=(z-x-y)/(n-2);
    x = 0;
    for(int b=0;b<n;++b)
    {
        if(a[b]!=x&&a[b]!=y&&fabs(a[b]-u)>x)
        x = fabs(a[b]-u);
    }
    printf("%.2lf %.2lf",u,x);
    return 0;
}

发现还是不对,后来才从题解区发现题目说的是删去一个最大值和一个最小值,所以还要标记上第一个最大值和最小值的位置。 正确的代码如下:

#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
int main()
{
    double x,y,z=0,u,xi,yi;
    int n;
    cin>>n;
    double a[n];
    for(int i=0;i<n;++i)
    {
        cin>>a[i];
    }
    x=y=a[0];
    for(int j=0;j<n;++j)
    {
        if(a[j]>x)
        x=a[j],xi=j;
        if(a[j]<y)
        y=a[j],yi=j;
        z+=a[j];
    }
    u=(z-x-y)/(n-2);
    x = 0;
    for(int b=0;b<n;++b)
    {
        if(b!=xi&&b!=yi&&fabs(a[b]-u)>x)
        x = fabs(a[b]-u);
    }
    printf("%.2lf %.2lf",u,x);
    return 0;
}

by WZWZWZWY @ 2022-08-29 16:47:53

你这样耗费时间太多了,完全可以把判断最大值和判断最小值以及计算总和放在同一个for循环里,所以我就把它简化了


by WZWZWZWY @ 2022-08-29 16:48:12

@kda_1111


by kda_1111 @ 2022-08-29 17:37:37

@WZRYWZWY 谢谢大佬解答 有道理 我为啥搞了三个循环555555


|