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

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

输入描述:

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

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

上个月C++课程设计做的一个《学生成绩管理和选课系统》

分享下代码.冗余的代码比较多.比较重要的部分有注释. 采用文件方式保存数据,需要先在D盘建立三个“表”,即是txt文件,分别是student.txt,teacher.txt,course.txt. 其中teacher.txt,中要预先存入一组数据,如下 教师id 姓名 密码 1 大明 123123 然后编译运行程序,选择教师登录,用上面的id和密码登录就可以进行学生的增删改查操作了. 下面贴代码,功能就看main()函数的菜单吧,懒得详述了... #include <iostream> #in

题目1018:统计同成绩学生人数

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:10803 解决:5662 题目描述: 读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入: 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔.第3行:给定分数 当读到N=0时输入结束.其中N不超过1000,成绩分数为(包含)0到100之间的一个整数. 输出: 对每个测试用例,将获得给定分数的学生人数输出. 样例输入: 3 80 60 90 60 2 85 66 0 5

A题 hdu 1235 统计同成绩学生人数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1235 统计同成绩学生人数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16022    Accepted Submission(s): 9214 Problem Description 读入N名学生的成绩,将获得某一给定分数的学生人数输

九度OJ 1018 统计同成绩学生人数

题目1018:统计同成绩学生人数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6337 解决:3419 题目描述: 读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入: 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的成绩,相邻两数字用一个空格间隔. 第3行:给定分数 当读到N=0时输入结束.其中N不超过1000,成绩分数为(包含)0到100之间的一个整数. 输出: 对每个测试用例,将获得给定分数的学生人数输出. 样例输入: 3 80 60

九度oj 题目1018:统计同成绩学生人数

题目描述: 读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入: 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔.第3行:给定分数 当读到N=0时输入结束.其中N不超过1000,成绩分数为(包含)0到100之间的一个整数. 输出: 对每个测试用例,将获得给定分数的学生人数输出. 样例输入: 3 80 60 90 60 2 85 66 0 5 60 75 90 55 75 75 0 样例输出: 1 0 2 #include<io

//输入学生人数,挨个输入姓名,身高,年龄,求平均年龄,然后按身高降序排列输出

13:52:49N U L L 2014/12/19 13:52:49using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text; namespace _1120_1210{    class JieGouTi    {        //输入学生人数,挨个输入姓名,身高,年龄,求平均年龄,然后按身高降序排列输出        public s

杭电 1235 统计同成绩学生人数

程序很简单,可是花了140多ms,看别人的15ms就可以了,不懂写更快的. Problem Description 读入N名学生的成绩,将获得某一给定分数的学生人数输出. Input 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔.第3行:给定分数 当读到N=0时输入结束.其中N不超过1000,成绩分数为(包含)0到100之间的一个整数. Output 对每个测试用例,将获得给定分数的学生人数输出. Sample Input 3 80

HDU1235 统计同成绩学生人数

统计同成绩学生人数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13735    Accepted Submission(s): 8033 Problem Description 读入N名学生的成绩,将获得某一给定分数的学生人数输出. Input 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的成绩,相

每日一九度之题目1018:统计同成绩学生人数

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:10905 解决:5719 题目描述: 读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入: 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的成绩,相邻两数字用一个空格间隔. 第3行:给定分数 当读到N=0时输入结束.其中N不超过1000,成绩分数为(包含)0到100之间的一个整数. 输出: 对每个测试用例,将获得给定分数的学生人数输出. 样例输入: 3 80 60 90 60 2 85 66 0