3.16 按绩点排名

成绩60分及以上的课程才予以计算绩点

绩点计算公式:[(课程成绩-50) / 10 ] * 学分

学生总绩点为所有绩点之和除以10

输入格式:

班级数

课程数 各个课程的学分

班级人数

姓名 各科成绩

输出格式:

class 班级号:

姓名(占10个字符,左对齐)  绩点

先按绩点排序,再按姓名ASCII码排序。


输入样例:

1

3 3 4 3 

3

张三 89 62 71

Smith 98 50 80

王五 67 88 91

输出样例

class 1:

王五        3.26

Smith      2.34

张三        2.28

#include<iostream>
#include<fstream>
#include<vector>
#include<set>
#include<string>
#include<iomanip>
using namespace std;

struct Student{
	string name;
	double score;
	Student(string n, double s):name(n),score(s){}
		
	bool operator<(const Student& s) const {
		if(this->score != s.score)
			return this->score > s.score;
		else
			return this->name < s.name;
	}
}; 

int main(){
	ifstream cin("data.txt");
	
	//读取班级数,并对每个班级的数据进行操作 
	int classNum = 0;
	while(cin >> classNum){
		cout << "class #:" << classNum<< endl;
		
		//读入课程数,并记录课程的学分 
		int courseNum = 0;
		cin >> courseNum;
		vector<int> xuefenVec(courseNum);
		for(int i = 0; i < courseNum; ++i)
			cin >> xuefenVec[i];
			
		//读入学生数,并将学生用set进行排序 
		int stuNum = 0;
		cin >> stuNum;
		set<Student> stuSet; 
		for(int i = 0; i < stuNum; ++i){
			string name;
			cin >> name;
			
			double sum = 0;
			for(int j = 0; j < courseNum; ++j){
				double score = 0;
				cin >> score;
				if (score >= 60){
					sum += ((score-50)/10)*xuefenVec[j];
				}
			}
			Student s(name, sum/10);
			stuSet.insert(s); 
		} 
		
		//按序输出学生信息 
		for(set<Student>::iterator it = stuSet.begin(); it != stuSet.end(); ++it){
			cout << left << setw(10);
			cout << it->name << it->score << endl;
		}
		cout << endl;
	}
	return 0;
}



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值