求助

B2095 白细胞计数

违规用户名577241 @ 2022-07-30 15:16:10

#include<iostream>
const int N=300+5;
double a[N],j[N];
using namespace std;
int main()
{
    int n;
    double s[2];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    double Max=a[0];
    for(int i=0;i<n;i++)
    {
        if(Max<=a[i])
        {
            Max=a[i];
            s[0]=Max;
        }
    }
    double Min=a[0];
    for(int i=0;i<n;i++)
    {
        if(Min>=a[i])
        {
            Min=a[i];
            s[1]=Min;
        }   
    }
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(a[j]==s[i])
            {
                for(int k=j;k<n;k++)
                {
                    a[k]=a[k+1];
                }
                n--;
                break;
            }
        }
    }
    double num=0;
    for(int i=0;i<n-2;i++)
    {
        num+=a[i];
    }
    double fi=num/(n-2);
    printf("%.2lf",fi);
    for(int i=0;i<n-2;i++)
    {
        if(a[i]>fi)
        {
            j[i]=a[i]-fi;
        }
        else
        {
            j[i]=fi-a[i];
        }
    }
    double Max2=j[0];
    for(int i=0;i<n-2;i++)
    {
        if(Max2<j[i])
        {
            Max2=j[i];
        }
    }
    printf("%.2lf",Max2);
}

by piggyh @ 2022-08-13 12:38:02


#include<iostream>
#include<cmath>
#include<cstdio> 
const int N=300+5;
double a[N],j[N];
using namespace std;
int main()
{
    int n;
    double s[2];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    double Max=a[0];
    for(int i=0;i<n;i++)
    {
        if(Max<=a[i])
        {
            Max=a[i];
            s[0]=Max;
        }
    }
    double Min=a[0];
    for(int i=0;i<n;i++)
    {
        if(Min>=a[i])
        {
            Min=a[i];
            s[1]=Min;
        }   
    }
//    for(int i=0;i<2;i++)
//    {
//        for(int j=0;j<n;j++)
//        {
//            if(a[j]==s[i])
//            {
//                for(int k=j;k<n;k++)
//                {
//                    a[k]=a[k+1];
//                }
//                n--;
//                break;
//            }
//        }
//    }这一步在干什么我没看懂,但是其实可以全部加完后把最大最小直接减掉,不用那么麻烦 
    double num=0.0;
    for(int i=0;i<n;i++)
    {
        num+=a[i];
    }
    num-=Max;
    num-=Min;
    double fi=num/(n-2);
    printf("%.2lf ",fi);
//    for(int i=0;i<n;i++)
//    {
//        if(a[i]>fi)
//        {
//            j[i]=a[i]-fi;
//        }
//        else
//        {
//            j[i]=fi-a[i];
//        }
//    }
//    
//    for(int i=0;i<n-2;i++)
//    {
//        if(Max2<j[i])
//        {
//            Max2=j[i];
//        }
//    }这两步显得有点冗长了其实一个循环就够了
    double Max2=0.0;
    bool o=1,f=1;
    for(int i=0;i<n;i++)
    {
        if(a[i]==Max&&o==1)//如果是最大或最小,直接continue,但是注意,这里o,f的作用是避免重复,因为如果有两个最大值没有o,f就会报错 
        {
            o=0;//第一次进来后保证后面不会再来 
            continue;
        }
        if(a[i]==Min&&f==1)
        {
            f=0;
            continue;
         } 
        Max2=max(abs(fi-a[i]),Max2);//abs绝对值,max求两者最大 
    }
    printf("%.2lf",Max2);
}
感觉整体代码有点太繁琐了qwq

by 违规用户名577241 @ 2022-08-19 13:57:09

蟹蟹dalao@piggyh


|