gaoxijun20140828 @ 2024-11-30 00:07:34
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,maxi=0,mini=0;
cin>>n;
double cha=0,n1[n+1],min1=10000000,max1=-1,total=0;
for(int i=1;i<=n;i++){
cin>>n1[i];
}
for(int i=1;i<=n;i++){
if(n1[i]<min1){
min1=n1[i];
}
else if(n1[i]>max1){
max1=n1[i];
}
}
for(int i=1;i<=n;i++){
if(n1[i]==max1){
maxi=i;
}
else if(n1[i]==min1){
mini=i;
}
}
n1[maxi]=0;
n1[mini]=0;
for(int i=1;i<=n;i++){
total+=n1[i];
}
printf("%.2f",total/(n-2));
double min2=-1000000;
for(int i=1;i<=n-2;i++){
if(abs(n1[i])-total/(n-2)>min2){
min2=abs(n1[i])-total/(n-2);
}
}
printf(" %.2f",min2);
}
by Zyhx @ 2024-11-30 03:09:25
我先问问你
n1[maxi]=0;
n1[mini]=0;
for(int i=1;i<=n;i++){
total+=n1[i];
}
printf("%.2f",total/(n-2));
double min2=-1000000;
for(int i=1;i<=n-2;i++){
if(abs(n1[i])-total/(n-2)>min2){
min2=abs(n1[i])-total/(n-2);
}
}
这一串的意义是什么,我懂这个for循环的i<=n-2的意思,就是你想去掉两个最大最小,但是你没办法控制最大最小一定在n-1和n啊,你可以先求n1不去最大最小的平均值,再去掉最大最小求平均值,最后输出就行了
for(register int i=1;i<=n;++i) sum1+=a[i]; //累加
sum1/=n; //求不去最大最小平均
for(register int i=1;i<=n;++i){
if(a[i]>maxn) maxn=a[i],sign1=i;
if(a[i]<minn) minn=a[i],sign2=i;//求最大最小并记录位置
}a[sign1]=0; a[sign2]=0;//去掉最大最小
for(register int i=1;i<=n;++i) sum2+=a[i];//累加
sum2/=(n-2);//求去掉最大最小平均值
printf("%.2lf %.2lf",sum2,abs(sum1-sum2));//输出
by gaoxijun20140828 @ 2024-11-30 09:46:27
谢谢大佬,懂了
by Westbrook_ @ 2024-11-30 13:44:31
#include<bits/stdc++.h>
using namespace std;
double a[310];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
double sum=0;
for(int i=2;i<n;i++){
sum+=a[i];
}
printf("%.2lf",sum/(n-2));
cout<<" ";
printf("%.2lf",abs(max(abs(a[n-1]-sum/(n-2)),abs(a[2]-sum/(n-2)))));
}
@gaoxijun20140828
by Westbrook_ @ 2024-11-30 13:45:36
@gaoxijun20140828 精华在最后一行,注意分类讨论