zoukankan      html  css  js  c++  java
  • 在不知道学生人数和每个学生课程数量的情况下对学生的平均成绩排序

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

    输入描述:

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

                 

  • 相关阅读:
    HDU 5400 Arithmetic Sequence
    poj 3041 Asteroids
    后缀自己主动机(SAM)学习指南
    【POJ3740】Easy Finding DLX(Dancing Links)精确覆盖问题
    高速幂小模板
    有用函数编程
    将C++的标识符转成OC的标识符
    【翻译自mos文章】oracle db 中的用户账户被锁--查看oracle用户的尝试次数
    Hibernate基础-HelloWord
    Android项目之HomeHealth基础学习2:Service
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/9770008.html
Copyright © 2011-2022 走看看