Description
给你n个学生的3门考试的成绩,要求输出这三门课每门课中成绩最好的学生姓名和他在这三门课的成绩,然后按平均成绩从高到低输出所有学生信息,接着输出平均分高于80分的学生信息和其平均成绩。
Input
第一行为一个正整数n(n>=3),其后跟n行,每一行为一个学生的信息,包含学生姓名(最多9个字符),和学生三门课的成绩。
Output
前3行位这三门课中成绩最好的学生姓名和这三门课的成绩,其后n行按平均成绩从高到低输出学生信息,接下来几行为平均分高于80分的学生信息和其平均成绩。其中学生信息就是每行输入的信息。(每行数据间以逗号分隔,每块内容间输出一个回车,输出保留两位小数。)
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
struct stu{
string name;
float score[3];
};
bool cmp1(stu arr1, stu arr2){
return arr1.score[0]>arr2.score[0];
}
bool cmp2(stu arr1, stu arr2){
return arr1.score[1]>arr2.score[1];
}
bool cmp3(stu arr1, stu arr2){
return arr1.score[2]>arr2.score[2];
}
bool cmp4(stu arr1, stu arr2){
return arr1.score[0]+arr1.score[1]+arr1.score[2]>arr2.score[0]+arr2.score[1]+arr2.score[2];
}
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin>>n;
vector<stu> arr(n);
for(int i=0;i<n;i++){
cin>>arr[i].name;
for(int j=0;j<3;j++){
cin>>arr[i].score[j];
}
}
sort(arr.begin(), arr.end(), cmp1);
cout<<arr[0].name<<','<< fixed << setprecision(2) <<arr[0].score[0]<<','<<arr[0].score[1]<<','<<arr[0].score[2]<<'\n';
sort(arr.begin(), arr.end(), cmp2);
cout<<arr[0].name<<','<< fixed << setprecision(2) <<arr[0].score[0]<<','<<arr[0].score[1]<<','<<arr[0].score[2]<<'\n';
sort(arr.begin(), arr.end(), cmp3);
cout<<arr[0].name<<','<< fixed << setprecision(2) <<arr[0].score[0]<<','<<arr[0].score[1]<<','<<arr[0].score[2]<<"\n\n";
sort(arr.begin(), arr.end(), cmp4);
for(int i=0;i<n;i++){
cout<<arr[i].name<<','<< fixed << setprecision(2) <<arr[i].score[0]<<','<<arr[i].score[1]<<','<<arr[i].score[2]<<'\n';
}
cout<<'\n';
for(int i=0;i<n;i++){
float num=arr[i].score[0]+arr[i].score[1]+arr[i].score[2];
if(num>240)
cout<<arr[i].name<<','<< fixed << setprecision(2) <<arr[i].score[0]<<','<<arr[i].score[1]<<','<<arr[i].score[2]<<','<<num/3<<'\n';
}
return 0;
}
没啥好说的,字里行间透出的是暴力