kda_1111 @ 2022-08-29 15:55:03
#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
int main()
{
double x,y,z,u;
int n;
z=0;
cin>>n;
double a[n];
for(int i=0;i<n;++i)
{
cin>>a[i];
}
x=y=a[0];
for(int j=0;j<n;++j)
{
if(a[j]>x)
x=a[j];
}
for(int h=0;h<n;++h)
{
if(a[h]<y)
y=a[h];
}
for(int v=0;v<n;++v)
{
z=z+a[v];
}
u=fabs((z-x-y)/(n-2)-a[0]);
for(int b=0;b<n;++b)
{
if(x!=a[b]||y!=a[b]||u>fabs((z-x-y)/(n-2)-a[b]))
{u=fabs((z-x-y)/(n-2)-a[b]);}
}
printf("%.2f %.2f",(z-x-y)/(n-2),u);
return 0;
}
by WZWZWZWY @ 2022-08-29 16:45:47
我改成了如下代码:
#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
int main()
{
double x,y,z=0,u;
int n;
cin>>n;
double a[n];
for(int i=0;i<n;++i)
{
cin>>a[i];
}
x=y=a[0];
for(int j=0;j<n;++j)
{
if(a[j]>x)
x=a[j];
if(a[j]<y)
y=a[j];
z+=a[j];
}
u=(z-x-y)/(n-2);
x = 0;
for(int b=0;b<n;++b)
{
if(a[b]!=x&&a[b]!=y&&fabs(a[b]-u)>x)
x = fabs(a[b]-u);
}
printf("%.2lf %.2lf",u,x);
return 0;
}
发现还是不对,后来才从题解区发现题目说的是删去一个最大值和一个最小值,所以还要标记上第一个最大值和最小值的位置。 正确的代码如下:
#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
int main()
{
double x,y,z=0,u,xi,yi;
int n;
cin>>n;
double a[n];
for(int i=0;i<n;++i)
{
cin>>a[i];
}
x=y=a[0];
for(int j=0;j<n;++j)
{
if(a[j]>x)
x=a[j],xi=j;
if(a[j]<y)
y=a[j],yi=j;
z+=a[j];
}
u=(z-x-y)/(n-2);
x = 0;
for(int b=0;b<n;++b)
{
if(b!=xi&&b!=yi&&fabs(a[b]-u)>x)
x = fabs(a[b]-u);
}
printf("%.2lf %.2lf",u,x);
return 0;
}
by WZWZWZWY @ 2022-08-29 16:47:53
你这样耗费时间太多了,完全可以把判断最大值和判断最小值以及计算总和放在同一个for循环里,所以我就把它简化了
by WZWZWZWY @ 2022-08-29 16:48:12
@kda_1111
by kda_1111 @ 2022-08-29 17:37:37
@WZRYWZWY 谢谢大佬解答 有道理 我为啥搞了三个循环555555