问题 F: 考试成绩
时间限制: 1.000 Sec 内存限制: 128 M
题目描述
考试结束了,晨晨的班主任知道了每个学生语、数、英三科的成绩,但她更希望知道每个学生的排名及各人的总分与班平均分的差,于是她求助于晨晨。
输入
第一行:一个整数n,表示晨晨班的学生人数。(n<=100)
接下来n行,每行三个120以内的整数,按学号顺序给出了各学生语、数、英三科成绩。
输出
输出n行,每行是用空格分开的两个数,按学号顺序给出各学生的排名情况及学生总分与班平均分的差(保留小数点后一位小数)。
样例输入 Copy
5 89 91 88 87 97 93 97 87 93 96 96 80 95 93 91
样例输出 Copy
5 -6.6 2 2.4 2 2.4 4 -2.6 1 4.4
思路:
这题比较入门,有一个难点就是排名时遇到会有并列情况(当时比赛时就卡到这上面没有想到巧方法),实际上只需这个人的成绩和其他人的成绩比较,如果成绩比别人低,加一就行。
代码:
#include <bits/stdc++.h>
using namespace std;
int a[105][3],c[105];
double b[105];
int main(){
int n;
cin>>n;
int i,j;
double ans=0;
for (i=0;i<n;i++){
for (j=0;j<3;j++){
cin>>a[i][j];
b[i]=a[i][j]+b[i];
}
ans=ans+b[i];
}
ans=ans/n*1.0;
for (i=0;i<n;i++){
b[i]=b[i]-ans;
}
for (i=0;i<n;i++){
for (j=0;j<n;j++){
if (b[i]<b[j]){
c[i]++;
}
}
}
for (i=0;i<n;i++){
printf("%d %.1lf\n",c[i]+1,b[i]);
}
}