【C系列7.6】结构-6 无题

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;
}

没啥好说的,字里行间透出的是暴力

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值