大佬们能帮忙看看哪里出问题了么 为啥AC不了呀

P5726 【深基4.习9】打分

Ykqccc @ 2020-09-30 17:28:40

#include<stdio.h>
int main()
{
    int i,n,a[1001],max,min,t,sum=0,sum_maxmin=0;
    float p;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
        max=min=a[0];
        for(i=1;i<=n;i++){
        if(max<a[i])
        {
            max=a[i];
        }
        if(min>a[i])
        {
            min=a[i];
        }
        }
        sum_maxmin=max+min;
    for(i=1;i<=n;i++)
    {
        sum+=a[i];
    }
    sum=sum-sum_maxmin;
    p=sum/(float)(n-2);
    printf("%.2f",p);
}

by Baiwhiter @ 2020-09-30 17:44:05

第一个不一定是最大值/最小值,所以建议先排序 比如说你取了第一个数,如果第一个数是1,那么久不会是最大值,而可能是最小值,所以你的最大值久不会得到更新。(望有帮助) 我的debug代码(建议先将数据排序]

#include<stdio.h>
#include<algorithm>
using namespace std;//改用了C++ 
int main()
{
    int i,n,a[1001],max,min,t,sum=0,sum_maxmin=0;
    float p;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
        sum+=a[i];//避免下面重复运算,将累加循环去除 
    }

    sort(a+1,a+n+1);//采用算法库中的排序函数,将其从小到大排序; 
    //max=min=a[0];
//    for(i=1;i<=n;i++){
//        if(max<a[i])
//        {
//            max=a[i];
//        }
//        if(min>a[i])
//        {
//            min=a[i];
//        }
//    }
    //以上省略是因为已经排序,故可以确定最大最小值
    min=a[1];
    max=a[n];//赋值 
    sum_maxmin=max+min;
//    for(i=1;i<=n;i++)
//    {
//        sum+=a[i];
//    }
    //上面已经解释 
    sum=sum-sum_maxmin;//去掉最大最小值 
    p=sum/(float)(n-2);
    printf("%.2f",p);
    return 0;//加上!!!! 
}

by する @ 2020-09-30 17:46:55

max,min没赋值

max=-1;

min=1e9;

#include<stdio.h>
int main()
{
    int i,n,a[1001]={0},max=0,min=1e9,t,sum=0,sum_maxmin=0;
    float p;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
        for(i=1;i<=n;i++){
        if(max<a[i])
        {
            max=a[i];
        }
        if(min>a[i])
        {
            min=a[i];
        }
        }
        sum_maxmin=max+min;
    for(i=1;i<=n;i++)
    {
        sum+=a[i];
    }
    sum=sum-sum_maxmin;
    p=sum/(float)(n-2);
    printf("%.2f",p);
}

by する @ 2020-09-30 17:48:55

下面是我的代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,a[1005],sum=0,mini=1e9,maxi=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        sum=sum+a[i];
        mini=min(mini,a[i]);
        maxi=max(maxi,a[i]);
    }
    cout<<setprecision(2)<<fixed<<(double)(sum-mini-maxi)/(n-2);
}

by Baiwhiter @ 2020-09-30 17:55:06

如果用c

#include<stdio.h>
int k[11];    
int i,n,a[1001],max,min,t,sum=0,sum_maxmin=0;
float p;//改为全局变量以便排序 
void sort(){
     for(int i=1;i<=n;i++){
        k[a[i]]++;
     }
     int x=1;
     for(int i=0;i<=10;i++){//因为打分是0-10 
        if(k[i])
          for(int j=k[i];j>0;j--){
              a[x]=i;
              x++;
          }
     }
}//若用c,桶排序 
int main()
{

    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
        sum+=a[i];//避免下面重复运算,将累加循环去除 
    }
    sort();//排序 
    //max=min=a[0];
//    for(i=1;i<=n;i++){
//        if(max<a[i])
//        {
//            max=a[i];
//        }
//        if(min>a[i])
//        {
//            min=a[i];
//        }
//    }
    //以上省略是因为已经排序,故可以确定最大最小值
    min=a[1];
    max=a[n];//赋值 
    sum_maxmin=max+min;
//    for(i=1;i<=n;i++)
//    {
//        sum+=a[i];
//    }
    //上面已经解释 
    sum=sum-sum_maxmin;//去掉最大最小值 
    p=sum/(float)(n-2);
    printf("%.2f",p);
    return 0;//加上!!!! 
}

by in_ung_zs @ 2020-09-30 18:38:51

OK


by YksKuusiTAlv @ 2020-10-01 00:38:38

没有必要开数组吧

#include<bits/stdc++.h>
using namespace std;
int main()
{
    double n,a,maxn=0,minn=10,sum=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        sum+=a;
        maxn=max(maxn,a);
        minn=min(minn,a);
    }
    sum-=maxn;sum-=minn;
    cout<<fixed<<setprecision(2)<<sum/(n-2);
}

|