Walker_L @ 2024-03-01 12:31:32
by Walker_L @ 2024-03-01 12:31:53
#include<iostream>
#include<cmath>
using namespace std;
double a[303];
int main() {
int n;
//mave是误差最大值
double min, max = 0,sum=0,ave,mave=0;
cin >> n;
//找最大
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] > max)
max = a[i];
}
//找最小
min = a[0];
for (int i = 0; i < n; i++)
{
if (a[i]<min)
{
min = a[i];
}
}
//除去最大最小的和
for (int i = 0; i < n; i++)
{
if (a[i]==max||a[i]==min)
{
continue;
}
sum += a[i];
}
ave = sum / (n - 2);
//求误差最大值
for (int i = 0; i < n; i++)
{
if (a[i] != max && a[i] != min)
{
if (fabs(a[i] - ave) > mave)
{
mave = fabs(a[i] - ave);
}
}
}
printf("%.2lf %.2lf", ave, mave);
return 0;
}
by 杜都督 @ 2024-03-01 13:41:09
顺着你的思路做了简单修改:
#include<iostream>
#include<cmath>
using namespace std;
double a[303];
int main() {
int n;
//mave是误差最大值
double min, max = 0,sum=0,ave,mave=0;
int minI = 0, maxI;
cin >> n;
//找最大
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] > max)
{
max = a[i];
maxI = i;
}
}
//找最小
min = a[0];
for (int i = 0; i < n; i++)
{
if (a[i]<min)
{
min = a[i];
minI = i;
}
}
//除去最大最小的和
for (int i = 0; i < n; i++)
{
if (i==maxI||i==minI)
{
continue;
}
sum += a[i];
}
ave = sum / (n - 2);
//求误差最大值
for (int i = 0; i < n; i++)
{
if (i != maxI && i != minI)
{
if (fabs(a[i] - ave) > mave)
{
mave = fabs(a[i] - ave);
}
}
}
printf("%.2lf %.2lf", ave, mave);
return 0;
}
想想为什么
@Walker_L
by Walker_L @ 2024-03-01 15:12:24
@杜都督 谢谢了,发现了,这道题和上一道不一样,存在多个相同的最大最小值情况,题目只需要分别删除一个最值。
by 杜都督 @ 2024-03-01 16:03:12
@Walker_L 没错