\(\color{blue}{P1104 生日(题目传送门)}\)


这道题的大意是:给出n个人的出生日期,让我们按年龄(就是先比年份,再比月份和日期,这是常识好吧)大小来排序,如果相同则按输入顺序排序。


开始解题

  • 理清题意后,我们只需按题意去模拟即可。

1. 强大的STL

大家肯定不陌生,STL里面有个sort的函数,格式为

sort(a.begin(),a.end());

然而,sort函数实际上是有3个参数的,除了其实位置和结束位置意外,还有一个用户自定义的cmp函数,当然,这个cmp函数还是需要自己写的,因为sort默认从小到大排,而对于结构体或者从小到大排,则需要用到cmp函数了。具体用法如下:

sort(a+1,a+1+n,cmp);//sort排序
//cmp函数
bool cmp(int x,int y)//从大到小排
{
return x>y;
}

具体代码如下:

运行结果如下:

显然,这样就实现了自定义排序的功能。

2.结构体

这道题,最方便的存储名字即年月日的方法就是用结构体来存,用法见下:

struct node{//struct+结构体名字
//定义这个结构体里的变量
string name;
int year;
int month;
int day;
int num;
}a[105];//注意这里的;当然c++里面struct 是自动生成‘;’的,无需再打

这就相当于对一个人的身份信息进行绑定了。

3.代码实现

代码实现就简单了,用结构体存储信息,再sort排序一下就OK了

code:

#include <bits/stdc++.h>
using namespace std;
int n;
struct node{//结构体
string name;//记录名字
int year;//出生年份
int month;//出生月份
int day;//出生日期
int num;//输入顺序
}a[105];
bool cmp(node x,node y){//cmp排序 注意此处的用法bool cmp(node x,node y)必须用结构体的名字,而不能用a x,a y。
if(x.year!=y.year)return x.year<y.year;//如果年份不同,则按年份小的在前面。
if(x.month!=y.month)return x.month<y.month;//...
if(x.day!=y.day)return x.day<y.day;
return x.num>y.num;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].year>>a[i].month>>a[i].day;//结构体读入方法
a[i].num=i;//存储顺序
}
sort(a+1,a+1+n,cmp);//sort排序
for(int i=1;i<=n;i++)cout<<a[i].name<<endl;//打印排序后的名字。
return 0;
}

运行样例结果:

没有问题~~~

题解P1104生日的更多相关文章

  1. 洛谷——P1104 生日

    P1104 生日 题目描述 cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序.但cjf君最近作业很多,没有时间,所以请你帮她排序. 输入输出格式 输入格式: 有2行, 第1行为OI组总 ...

  2. 洛谷 P1104 生日

    P1104 生日 题目描述 cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序.但cjf君最近作业很多,没有时间,所以请你帮她排序. 输入输出格式 输入格式: 有2行, 第1行为OI组总 ...

  3. 【洛谷P1104】生日

    题目描述 cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序.但cjf君最近作业很多,没有时间,所以请你帮她排序. 输入输出格式 输入格式: 有2行,第1行为OI组总人数n:第2行至第n ...

  4. 洛谷【P1104】生日(冒泡排序版)

    题目传送门:https://www.luogu.org/problemnew/show/P1104 题目很简单,我主要是来讲冒泡排序的. 所谓冒泡排序,流程如下: 每次确定一个\(rk\)(从\(n\ ...

  5. 洛谷【P1104】生日(插入排序版)

    题目传送门:https://www.luogu.org/problemnew/show/P1104 题目很简单,我主要是来讲插入排序的. 所谓插入排序,就是从待排序数组不断将数据插入答案数组里. 假设 ...

  6. 洛谷【P1104】生日(选择排序版)

    题目传送门:https://www.luogu.org/problemnew/show/P1104 题目很简单,不过我是来讲选择排序的. 选择排序\((Selection sort)\)是一种简单直观 ...

  7. 题解报告:hdu1201(18岁生日)

    2018-02-24题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1201 Problem Description Gardon的18岁生日就要到了,他 ...

  8. 题解 BZOJ 1037 & Luogu P2592 [ZJOI2008]生日聚会

    BZOJ & Luogu 老师说是背包?并没看出来QAQ 设f[i][j][o][p]表示已经选了i个人,j个男生,男生比女生最多多o个,女生比男生最多多p个时的方案数 两种转移: <= ...

  9. vijos题解

    Vijos题解 题库地址:https://vijos.org/p P1001 谁拿了最多奖学金 题意:按照指定要求计算奖学金,直接用if判断即可 #include<iostream> us ...

随机推荐

  1. Go和Java的性能对比,真的如此吗?

    前两天我看到了一篇文章,测试Java和Go和Python的性能,其测试内容是一个排序,排序一亿次,然后看那个语言耗时最短,我先贴一下这个文章的测试结果,Java竟然比Go快了一倍不止,Go不是号称接近 ...

  2. Android学习进度一

    在解决了电脑产生的一系列问题之后成功安装了Android Studio,并在其自带的手机模拟器上成功运行了第一个App(Hello World!),通过这个最简单的App研究了App基本的工程结构,为 ...

  3. VS2015发布WEB项目

    第一步:在打开的VS2015中,右击项目,在弹出的对话框中,点击“发布”. 第二步:配置发布的WEB项目. 1.为要发布的项目起个名称,一般和项目名称相同. 2.选择以文件系统发布. 3.设置相关配置 ...

  4. Spring Boot2 系列教程(二十) | SpringBoot 是如何实现日志的?

    微信公众号:一个优秀的废人.如有问题,请后台留言,反正我也不会听. 前言 休息日闲着无聊看了下 SpringBoot 中的日志实现,把我的理解跟大家说下. 门面模式 说到日志框架不得不说门面模式.门面 ...

  5. 12.Android-SQLiteOpenHelper使用

    1.SQLite介绍 SQLite,是一款轻型的数据库,它的优缺点有如下: 轻量级,适合嵌入式设备,并且本身不依赖第三方的软件,使用它也不需要“安装”. 并发(包括多进程和多线程)读写方面的性能不太理 ...

  6. map set vector用法小总结

    1.Map 定义 #include<map> map<string,bool> mp; 插入 mp[s]=; mp.insert(make_pair(s,)); 输出 cout ...

  7. PTA - dfs

    地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...

  8. 关于爬虫的日常复习(8)—— 实战:request+正则爬取猫眼榜单top100

  9. 16. 产生Javadoc

    过程与export >> javadoc一致,需要注意的是字符集的设置. -encoding UTF-8 -charset UTF-8 export >> javadoc : ...

  10. 玩转Django2.0---Django笔记建站基础七(表单与模型)

    第七章 表单与模型 表单是搜集用户数据信息的各种表单元素的集合,作用是实现网页上的数据交互,用户在网站输入信息,然后提交到网站服务器端进行处理(如数据录入和用户登录.注册等). 用户表单是web开发的 ...