\(\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. 【记】Linux下安装JDK1.7

    Java官网已经不提供除最新版本以外版本的JDK下载了,下载JDK1.7,密码: rsqg 本地Linux系统为Centos6.9,本身就没安装Java:已安装Java需要先卸载,卸载方法请百度. 1 ...

  2. 3 分钟带你深入了解 Cookie、Session、Token

    经常会有用户咨询,CDN 是否会传递 Cookie 信息,是否会对源站 Session 有影响,Token 的防盗链配置为什么总是配置失败?为此,我们就针对 Cookie.Session 和 Toke ...

  3. Scala实践14

    1.Scala的future 创建future import scala.concurrent._ import ExecutionContext.Implicits.global object Fu ...

  4. BFC 是什么东西?

    以下是本人理解的 BFC  和 官方文档BFC资料 . BFC 是页面元素的隐藏属性,全称 : Block Formatting Context 作用: 可以清除子元素浮动后不良效果在线效果地址:ht ...

  5. szTom's Code Style

    介绍szTom在C++中使用的代码风格. 头文件 必须使用using namespace std; 如果是C头文件,必须使用c前缀文件名. #include <cstdio> 而不是 #i ...

  6. Linux删除文件 清除缓存

    相信很多测试 经常会经历开发叫你清除缓存这种事. 那我们要怎么清呢? 一.首先,确认你要清除的缓存在哪个目录下,然后切换到该目录下,比如 我现在知道我的的缓存目录是在newerp这个目录下,则如图 二 ...

  7. Linux.vim编辑器显示行号

    显示行号 :set number 取消显示行号:set nonumber

  8. Java入门 - 语言基础 - 01.Java简介

    原文地址:http://www.work100.net/training/java-intro.html 更多教程:光束云 - 免费课程 Java简介 序号 文内章节 视频 1 概述 2 主要特性 3 ...

  9. MNIST数据集

    一.MNIST数据集分类简单版本 import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data # ...

  10. kuangbin专题专题十一 网络流 Dining POJ - 3281

    题目链接:https://vjudge.net/problem/POJ-3281 题目:有不同种类的食物和饮料,每种只有1个库存,有N头牛,每头牛喜欢某些食物和某些饮料,但是一头牛 只能吃一种食物和喝 ...