救命,自测能过,洛谷全WA

P5726 【深基4.习9】打分

Oy2006 @ 2024-08-26 08:14:34

#include<stdio.h>

int main()
{
    int n,a[n];
    scanf("%d\n",&n);
    int i;
    double result=0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
     } 
    for(i=0;i<n-1;i++)//选择排序 
    {
        int j,t1=a[i],t2=i;
        for(j=i+1;j<n;j++)
        {
            if(a[j]<t1)
            {
                t1=a[j];
                t2=j;
            }
        }
        a[t2]=a[i];
        a[i]=t1;
    }
    for(i=1;i<n-1;i++)
    {
        result+=a[i];
    }
    result/=(n-2);
    printf("%.2lf",result);
    return 0;
}

by Jason_Ming @ 2024-08-26 08:17:05

@Oy2006 众所周知,定义数组时的大小应该是常量。这道题不用卡空间卡到跟n一样,数组开大点没事的。


by Jason_Ming @ 2024-08-26 08:17:47

@Oy2006 如果遇到真的需要卡空间的情况,建议使用vector,而不是玩这种抽象的写法


by Jason_Ming @ 2024-08-26 08:19:52

@Oy2006 当然,其实还有一个错因是n没有初始化,导致定义a数组的时候大小其实是不确定的


by Oy2006 @ 2024-08-26 08:19:59

@Jason_Ming 多谢大佬,明白问题所在了,是开数组的时候不能再设置大小时用未知数,关注大佬了


by Jason_Ming @ 2024-08-26 08:22:12

@Oy2006 不客气,另外提醒一下,比如n最大可以到1000,那么我们通常会把数组开到1005或1010,而不是正好的1000,防止出现意外情况,现阶段你可能不会遇到,但将来就有可能


by King_and_Grey @ 2024-08-26 08:41:26

@Oy2006

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n;
float ans;
signed main(){
    cin >> n;
    float a[n + 1];
    for(int i = 1;i <= n;i++){
        cin >> a[i];
    }
    sort(a + 1,a + n + 1,greater<float>());
    for(int i = 2; i <= n - 1;i++){
        ans += a[i];
    }
    cout << fixed << setprecision(2) << ans / (n - 2) << endl;
    return 0;
}

可以借鉴一下


by Oy2006 @ 2024-08-26 10:58:59

@King_and_Grey

多谢大佬


|