第一个是你这个a和b输反了,然后下面那一串都要改。
然后他是每一行是评委给一个选手打的分,所以他是在每一行里面求最小值和最大值,不是每一列求最小值和最大值。这里的 b 是行数, a 是列数
还有就是你这个memset有点问题,因为这里赋值是按照字节赋值的,所以你如果要这样赋值的话建议你用fill(没用过不知道怎么用)
如果你用memset建议你这样写:
```cpp
memset(mind,c,sizeof(mind));
memset(maxd,h,sizeof(maxd));
```
by jingyu0929 @ 2023-07-27 10:11:46
@[jingyu0929](/user/747916)
说错了,不是输反了,是你后面用的基本都是反的
by jingyu0929 @ 2023-07-27 10:12:23
其实没必要定义一百个最小值和最大值,memset也没必要,直接在第一个for循环里面定义就可以了,再在第二个for循环操作出平均值e【100】.没必要重新开循环再求平均值, 还有就是最大值和最小值直接0x3f3f3f3f和-0x3f3f3f3f就行了;数组定义时可以多定义10个,比如这题定义m时可以定义成m【30】【110】;就可以在循环的时候直接int i=1;i<=b;同时还要说,这题应该这样定义m【110】【30】,因为是100个学生分别被20个评委评分,你弄反了。下面是我改过的AC代码,希望对你有所帮助
by iranai @ 2023-07-27 10:51:04
```c
#include<bits/stdc++.h>
using namespace std;
//你的c和h没用我就删掉了
int m[110][30];//多定义10个,循环较方便
double e[110];//每人的平均分
double p=-0x3f3f3f3f;
int main() {
int a,b;
cin>>a>>b;//0x3f3f3f3f大约是10亿?反正比直接手打20亿方便
for(int i=1; i<=a; i++) for(int s=1; s<=b; s++) cin>>m[i][s];
for(int i=1; i<=a; i++) {//a和b更换位置
int u=0;//定义在内部,局部变量初始化
//避免数组过多没用
int maxd=-0x3f3f3f3f;
int mind=0x3f3f3f3f;
for(int s=1; s<=b; s++) {
u+=m[i][s];
if(m[i][s]>=maxd) maxd=m[i][s];
if(m[i][s]<=mind) mind=m[i][s];
}
u-=maxd+mind; //更简单
e[i]=u*1.0/(b-2);
}
for(int g=1; g<=a; g++) {
if(e[g]>p) p=e[g];
}
printf("%.2f",p);
return 0;
}
```
by iranai @ 2023-07-27 10:51:31
@[Little_Andyyu](/user/715774)
改了半个小时,我还是太蒟蒻(逃
by iranai @ 2023-07-27 10:52:29