Advertisement

上海计算机学会2021年9月月赛C++丙组T4最年长的人

阅读量:

任务要求在给定n个人的出生日期中找到年龄最大的(即出生最早的)并输出其出生日期。可以通过以下方法解决:
问题描述:给定n个日期(格式为YYYY-MM-DD),找出其中最小的日期并输出。
解决方法:

  • 方法一:直接比较每个日期的年、月、日部分。
  • 方法二:将每个日期转换为一个整数(如YYYY10000 + MM100 + DD),然后比较这些整数。
  • 方法三:将每个日期作为字符串直接进行比较。
    复杂度分析:
  • 方法一的时间复杂度为O(n),空间复杂度为O(1)。
  • 方法二的时间复杂度为O(n),空间复杂度为O(1)。
  • 方法三的时间复杂度为O(n),空间复杂度为O(1)。
    适用范围:适用于n从1到1,00万的情况,并且保证输入数据的有效性。
    最终输出结果应与输入格式一致(如YYYY-MM-DD)。

最年长的人

内存限制: 256 Mb时间限制: 1000 ms

题目描述

给定 n 个人的出生日期,请找出其中年龄最大的,并输出他的出生日期。

输入格式

第一行:单个整数 n;
第二行到第n+1行:每行格式如下:

四位整数变量 y 代表年份;
两位整数变量 m 用于表示月份;
两位整数变量 d 用于表示日期;
年、月、日之间通过减号分隔。

输出格式

一行字符串:表示最早的出生日期,格式同输入。

数据范围

在58.89%的样本中(即约64/64个案例中),变量n的取值范围限定于[64, 66]区间内。
在全部数据集中(即所有样本中),变量n的最大取值为一百万。
研究覆盖的时间段为一世纪至二世纪期间。
确保每个月份和日期均为两位数,并且符合实际有效的日期格式。

样例数据

输入:
4
2008-08-08
1953-06-15
1949-10-01
1926-08-18
输出:
1926-08-18

解析:

拿到题,最先想到的应该是将求最小的年月日,代码如下:

复制代码
 #include <bits/stdc++.h>

    
 using namespace std;
    
 int main()
    
 {
    
     int n;
    
     cin>>n;
    
     int my=2021,mm,md;//最小的出生年月日
    
     for(int i=1;i<=n;i++){
    
     int y,m,d;
    
     scanf("%d-%d-%d",&y,&m,&d);
    
     if (y<my){
    
         my=y,mm=m,md=d;
    
     }else if (my==y&&m<mm){
    
         mm=m,md=d;
    
     }else if (my==y&&mm==m&&d<md){
    
         md=d;
    
     }
    
     }
    
     printf("%02d-%02d-%02d",my,mm,md);
    
     return 0;
    
 }

进一步,我们可以把年月日换算成一个8位数,求最小值,代码如下:

复制代码
 #include <bits/stdc++.h>

    
 using namespace std;
    
 int main()
    
 {
    
     int n;
    
     cin>>n;
    
     int mi=20230000;//最小的出生年月日
    
     for(int i=1;i<=n;i++){
    
     int y,m,d;
    
     scanf("%d-%d-%d",&y,&m,&d);
    
     mi=min(mi,y*10000+m*100+d);
    
     }
    
     printf("%02d-%02d-%02d",mi/10000,mi/100%100,mi%100);
    
     return 0;
    
 }

再进一步,我们可以把日期当成一个字符串,求最小值,代码如下:

复制代码
 #include <bits/stdc++.h>

    
 using namespace std;
    
 int main()
    
 {
    
     int n;
    
     cin>>n;
    
     string mi="2023-00-00";//最小的出生年月日
    
     for(int i=1;i<=n;i++){
    
     string s;
    
     cin>>s;
    
     if (s<mi) mi=s;
    
     }
    
     cout<<mi;
    
     return 0;
    
 }

全部评论 (0)

还没有任何评论哟~