码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-11 01:54:39      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:ble   读取   rhs   image   个学生   ctr   ios   判断   main   

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

输入描述:

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

 

             

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

标签:ble   读取   rhs   image   个学生   ctr   ios   判断   main   

原文地址:https://www.cnblogs.com/wuyepeng/p/9770008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!