在不知道学生人数和每个学生课程数量的情况下对学生的平均成绩排序

Posted cs_wu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在不知道学生人数和每个学生课程数量的情况下对学生的平均成绩排序相关的知识,希望对你有一定的参考价值。

题目要求是对学生平均成绩进行排序,降序。如果分数相同则按输入的前后顺序输出

输入描述:

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是结束输入

 

             

以上是关于在不知道学生人数和每个学生课程数量的情况下对学生的平均成绩排序的主要内容,如果未能解决你的问题,请参考以下文章

SQL:查询每门课程的课程名、选课学生姓名及其学号,选课人数

MySQL查询练习

练习一:对学生—课程数据库进行以下查询,按要求写出关系代数和SQL语句. 1. 查询全体学生的学号和姓名. .

08 学生课程分数的Spark SQL分析

MySQL数据库

08 学生课程分数的Spark SQL分析