Eval1024 @ 2022-04-07 21:32:56
#include<stdio.h>
int main()
{
int n;
int a[1000];
scanf("%d",&n);
for(int i=0;i<n;i--)
scanf("%d",&a[i]);
int max=a[0],min=a[0];
for(int i=0;i<n;i++)
{
max=max>=a[i]?max:a[i];
min=min<=a[i]?min:a[i];
} //找出最值
for(int j=0;j<n;j++)
if(a[j]==max)
{
a[j]=0;
break;
} //将第一个值为最大值的标为0
for(int j=0;j<n;j++)
if(a[j]==min)
{
a[j]=0;
break;
} //将第一个值为最小值的标为0
double x=0;
for(int i=0;i<n;i++)
x+=a[i];
printf("%.2f",x/(n-2));
return 0;
}
为啥会re啊
by ingx @ 2022-04-07 21:36:04
第一个for循环i++写成i--了(其他没看
by KAqwq @ 2022-04-07 21:37:29
Runtime Error 你的程序跑到一半断了
by Eval1024 @ 2022-04-07 21:39:28
@ingx 没错就是这个问题,我真是眼瞎了。感谢大佬
by Nagligivaget @ 2022-04-24 22:12:51
@Eval1024 这代码...好繁琐啊
include<stdio.h>
int main() {
int n;
int a[1000];
int ma=-1,mi=2147483647;
//不要习惯写max或min这类已经定义过的名字
scanf("%d",&n);
for(int i=0;i<n;i--){
scanf("%d",&a[i]);
/*max=max>=a[i]?max:a[i];*/ma=max(ma,a[i]);
/*min=min<=a[i]?min:a[i];*/mi=min(mi,a[i]);
//没必要用三目数对,直接用函数就行
}
printf("%.2f",(x-ma-mi)/(n-2));//在这里减就行啦
return 0;
}
by Nagligivaget @ 2022-04-24 22:14:14
@Eval1024 还有就是那个i--改成i++
by Nagligivaget @ 2022-04-24 22:18:26
@Eval1024 我改的把x的定义删啦,直接运行时会报错的,所以不要直接复制粘贴 把x+=a[i];放到循环里就行
by Nagligivaget @ 2022-04-24 22:29:08
@Eval1024 太多循环时间复杂度会比这个高很多,这是改进后的;
#include<bits/stdc++.h>
using namespace std;
int main(){
int n=0,a[1000];//定义
int ma=-1,mi=2147483647;//定义
double x=0;//定义
cin>>n;//输入
for(int i=0;i<n;i++){
cin>>a[i];//输入
ma=max(ma,a[i]); //找出最大
mi=min(mi,a[i]); //找出最小
x+=a[i];//统计总分
}
cout<<fixed<<setprecision(2)<<(x-ma-mi)/(n-2);//保留两位输出
return 0;
}
代码过啦,放心食用
by Nagligivaget @ 2022-04-24 22:32:28
@Eval1024 这是我的方法
#include<bits/stdc++.h>
#define MAX 1000//养成好习惯
using namespace std;
int main(){
int n=0;
double a[MAX],z=0;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i],z+=a[i];
sort(a,a+n);//排序
cout<<fixed<<setprecision(2)<<(z-a[0]-a[n-1])/(n-2);//减去最大和最小后保留两位
}