题目要求是对学生平均成绩进行排序,降序。如果分数相同则按输入的前后顺序输出
输入描述:
wu 90 78 66
wang 78 56
li 99
xiaoming 67 89 56 90
输出描述:
li 99
wu 78
xiaoming 76
wang 67
解题思路:定义一个Stu类来存放学生的姓名和平均分数,然后用sort函数对学生的平均分数进行排序,这题只要的难点是判断学生分数的输入结束(因为我们事先并不知道学生到底选了几科课程)解决方法是先读取一行再用stringstream分出姓名和分数,应为stringstream有类型转换所以即使姓名是string分数是int也是没影响的。
#include <iostream> #include <sstream> #include <vector> #include <algorithm> using namespace std; typedef struct { string name; int ave; }Stu; vector<Stu> vec; int cmp(const Stu& lhs, const Stu& rhs) { return lhs.ave > rhs.ave; } int main() { string line; stringstream ss; while (getline(cin, line) && line != "") { Stu s; int cnt = 0; double sum = 0.0; double score; ss.clear(); ss << line; //cout << ss << endl; ss >> s.name; //cout << s.name << endl; while (ss >> score) { sum += score; cnt++; } s.ave = (int)(sum / (double)cnt + 0.5);//这里+0.5的意思是如果4舍5入 //cout << s.ave << endl; vec.push_back(s); } sort(vec.begin(), vec.end(),cmp); for (int i = 0; i < vec.size(); ++i) { cout << vec[i].name << " " << vec[i].ave << endl; } return 0; }
输出结果截图:
解释:ctrl+z是结束输入
原文地址:https://www.cnblogs.com/wuyepeng/p/9770008.html
时间: 2024-10-10 17:00:14