成績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;elsereturn 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;
}