九度OJ 1061 成绩排序
来源:互联网 发布:asp网页源码 编辑:程序博客网 时间:2024/05/21 08:42
题目来源:http://ac.jobdu.com/problem.php?pid=1061
题目描述:
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
输入:
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
输出:
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。然后输出学生信息,按照如下格式:姓名 年龄 成绩
样例输入:
3
abc 20 99
bcd 19 97
bed 20 97
样例输出:
bcd 19 97
bed 20 97
abc 20 99
提示:
学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。
该题目有两种解法,分别如下:
第一种解法:采用定义一个比较函数cmp的方法来实现,该代码如下:
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;struct E{ char name[101]; int age; int score;}buf[1000]; bool cmp(E a,E b){ //实现比较规则 if(a.score != b.score) return a.score < b.score; //若分数不相同,则分数低者在前 int tmp = strcmp(a.name,b.name); if(tmp != 0) return tmp < 0; //若分数相同,则名字字典序小者在前 else return a.age < b.age; //若名字也相同,则年龄小者在前 }int main(){ int n; while(scanf("%d",&n) != EOF){ for(int i = 0;i < n;i ++){ //分别赋值; scanf("%s%d%d",buf[i].name,&buf[i].age,&buf[i].score); } sort(buf,buf + n,cmp); //利用自己定义的规则对数组进行排序 for(int i = 0;i < n;i ++){ printf("%s %d %d\n",buf[i].name,buf[i].age,buf[i].score); //按照题目要求的固定格式输出 } } return 0; }
第二种解法:直接定义结构体的小于运算符来说明排序规则(一般情况下采用此法),该代码如下:
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;struct E{ char name[101]; int age; int score; bool operator < (const E &b) const{ //利用C++运算符重载直接定义小于运算符 if(score != b.score) return score < b.score; int tmp = strcmp(name,b.name); if(tmp != 0) return tmp < 0; else return age < b.age; }}buf[1000]; int main(){ int n; while(scanf("%d",&n) != EOF){ for(int i = 0;i < n;i ++){ //分别赋值; scanf("%s%d%d",buf[i].name,&buf[i].age,&buf[i].score); } sort(buf,buf + n); //上面结构体定义中已经重载小于运算符,故sort函数第三个参数不需要比较函数 for(int i = 0;i < n;i ++){ printf("%s %d %d\n",buf[i].name,buf[i].age,buf[i].score); //按照题目要求的固定格式输出 } } return 0; }
0 0
- 九度OJ 1061: 成绩排序
- 【王道九度OJ】1061成绩排序
- 九度OJ题目1061:成绩排序
- 九度OJ 题目1061:成绩排序
- 九度 OJ 1061:成绩排序
- 九度OJ 1061 成绩排序
- 九度OJ 1061 成绩排序
- 九度OJ-1061:成绩排序
- 题目1061:成绩排序 九度OJ
- 九度OJ题目1061:成绩排序
- 九度OJ 1061:成绩排序 (排序)
- 九度OJ 1061 成绩排序(结构体排序)
- 【九度OJ】题目1061:成绩排序 解题报告
- 九度OJ 题目1196:成绩排序
- 九度OJ题目1196:成绩排序
- 【九度OJ】1196:成绩排序
- 九度OJ 1196:成绩排序 (排序)
- 九度1061 成绩排序
- HTTP协议的头信息详解
- Java科普之加密算法
- 避免table的border重叠变粗,只需要对table的css设定border-collapse:collapse; 可以解决
- JavaSE 之 ----- JVM 内存形式、GC 原理解析
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~) .
- 九度OJ 1061 成绩排序
- 微信表情的字符编号完整版【图文并茂哦!】
- public/private/protected的具体区别
- java 多种判断key是否在map中存在的方法
- 字符编码
- linux中利用sendbox自动安装MySQL
- 《Android深入透析》之常用设计模式经验谈
- 4bash中对日期的使用
- HTTP协议