1077 互评成绩计算 (20 分)

1077 互评成绩计算 (20 分)
在浙大的计算机专业课中,经常有互评分组报告这个环节。一个组上台介绍自己的工作,其他组在台下为其表现评分。最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平均分记为 G
​1
​​ ;老师给这个组的评分记为 G
​2
​​ 。该组得分为 (G
​1
​​ +G
​2
​​ )/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

代码如下:

//这个题最后输出时,必须用printf("%d",(int)((t[0]+temp1)/2+0.5));
//不可以这样输出printf("%.0lf",(double)((t[0]+temp1)/2));
//会有测试点过不去;最后结果四舍五入后保留整数分
//一定要四舍五入;
/*
int f(double m)//四舍五入保留整数;
{
if(m>=0) return (int)(m+0.5);//m可以是一个表达式;
else return (int)(m-0.5);
}
double f1(double m1)//四舍五入保留一位小数;
{
if(m1>=0) return (double)((int)(m110+0.5))/10;
else return (double)((int)(m1
10-0.5))/10;
}
double f2(double m2)//四舍五入保留两位小数;
{
if(m2>=0) return (double)((int)(m2100+0.5))/100;
else return (double)((int)(m2
100-0.5))/100;
}
double f3(double m3)//四舍五入保留三位小数;
{
if(m3>=0) return (double)((int)(m31000+0.5))/1000;
else return (double)((int)(m3
1000-0.5))/1000;
}
/
#include<stdio.h>
int main()
{
int n,m,t[100]={0},i,j,count=0,h,t1[1000]={0},k=0,temp;
double sum=0,temp1;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
sum=0;
k=0;
count=0;//去掉一个最高分,去掉一个最低分之后,去掉不合法的输入之后的个数;
for(j=0;j<n;j++)
{
scanf("%d",&t[j]);//把后面n-1符合条件评委的评分赋值给t1数组;
if(j!=0&&t[j]>=0&&t[j]<=m) t1[k++]=t[j];
}
for(j=0;j<k-1;j++)//对数组t1后面n-1个数进行升序排列;
{
for(h=j+1;h<k;h++)
{
if(t1[j]>t1[h])
{
temp=t1[j];
t1[j]=t1[h];
t1[h]=temp;
}
}
}
//t[0]是老师的评分;
for(j=1;j<k-1;j++)//t1[1]是最低分,t[k-1]是最高分;
{
sum=sum+t1[j];
count++;
}
temp1=sum
1.0/count;
printf("%d\n",(int)((temp1+t[0])/2+0.5));//t[0]是老师的评分,temp是其他组评分的平均分;
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43788669/article/details/88607920