1077 互评成绩计算
在浙大的计算机专业课中,经常有互评分组报告这个环节。一个组上台介绍自己的工作,其他组在台下为其表现评分。最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平均分记为 G1;老师给这个组的评分记为 G2。该组得分为 (G1+G2)/2,最后结果四舍五入后保留整数分。本题就要求你写个程序帮助老师计算每个组的互评成绩。
输入格式:
输入第一行给出两个正整数 N(> 3)和 M,分别是分组数和满分,均不超过 100。随后 N 行,每行给出该组得到的 N 个分数(均保证为整型范围内的整数),其中第 1 个是老师给出的评分,后面 N−1 个是其他组给的评分。合法的输入应该是 [0,M] 区间内的整数,若不在合法区间内,则该分数须被忽略。题目保证老师的评分都是合法的,并且每个组至少会有 3 个来自同学的合法评分。
输出格式:
为每个组输出其最终得分。每个得分占一行。
输入样例:
6 50
42 49 49 35 38 41
36 51 50 28 -1 30
40 36 41 33 47 49
30 250 -25 27 45 31
48 0 0 50 50 1234
43 41 36 29 42 29
输出样例:
42
33
41
31
37
39
自己写的:写代码还是不仔细,有很多问题,细节上处理还不够,比如for循环中数组i、j的书写就不够仔细,还有 || && 两个运算符的运用
#include <stdio.h>
int main(void){
int n,m;
scanf("%d %d",&n,&m);
int score[n-1];
int g1,i,j;
for(i=0;i<n;i++){
int sum=0,max=0,min=101;
int cot=0,fenshu;
scanf("%d",&g1);//老师打的分数
for(j=0;j<n-1;j++){
scanf("%d",&score[j]);
if(score[j]<0 || score[j]>m){//如果不符合条件的数,直接continue;
continue;
}
printf("%d ",score[j]);
max=max>score[j]?max:score[j];
min=min<score[j]?min:score[j];
sum+=score[j];
cot++;
}
sum-=(max+min);
printf("\n%d %d %d ",sum,max,min);
fenshu=(((double)sum/(cot-2))+g1)/2+0.5;//一个浮点数+0.5在强制转换可以达到四舍五入的效果
printf("%d\n",fenshu);
}
return 0;
}
2022.7.10
总结:这题不难,需要注意的点就是在最后结果的四舍五入
#include <stdio.h>
int main(void){
int n,m;
scanf("%d %d",&n,&m);
int i,g1,a[n-1],j;
for(i=0;i<n;i++){
int cot=0,max=0,min=m;
float sum=0;
scanf("%d",&g1);
for(j=0;j<n-1;j++){
scanf("%d",&a[i]);
if(a[i]>=0 && a[i]<=m){
cot++;
sum+=a[i];
max=max>a[i]?max:a[i];
min=min<a[i]?min:a[i];
}
}
printf("%d\n",(int)((g1+(sum-max-min)/(cot-2))/2+0.5));
}
return 0;
}
好好学习,天天向上!
我要考研! 缩小差距!