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
多谢大佬