0分求助

P5738 【深基7.例4】歌唱比赛

第一个是你这个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


|