蓝桥杯 日期问题

xiaoxiao2021-02-28  46

标题:日期问题 小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。 比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。 给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗? 输入 ---- 一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9) 输出 ---- 输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。 样例输入 ---- 02/03/04 样例输出 ---- 2002-03-04 2004-02-03 2004-03-02 资源约定: 峰值内存消耗(含虚拟机) < 256M CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 注意: main函数需要返回0; 只使用ANSI C/ANSI C++ 标准; 不要调用依赖于编译环境或操作系统的特殊函数。 所有依赖的函数必须明确地在源文件中 #include <xxx> 不能通过工程设置而省略常用头文件。 提交程序时,注意选择所期望的语言类型和编译器类型。 #include<bits/stdc++.h> using namespace std;   typedef struct date{   int year;   int month;   int day;   }date;   int pf(const date &d)   {     printf("d-d-d\n",d.year,d.month,d.day);   }   bool compare(const date &a,const date &b)   {    if(a.year!=b.year)       return a.year<b.year;      if(a.month!=b.month)         return a.month<b.month;      if(a.day!=b.day)          return a.day<b.day;   }   bool isR(int dd)   {   if(dd%4==0||(dd0!=0&&dd@0==0))     return true;   else    return false;   }   bool check(const date &d)   {   int day[1000]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};   if(isR(d.year))     day[2]=29;   else      day[2]=28;   if(d.year>2059||d.year<1960)    return false;   if(d.month<1||d.month>12)     return false;   if(d.day<1||d.day>day[d.month])     return false;   } int main() { int a,b,c; scanf("%d/%d/%d",&a,&b,&c); date d[6]={{2000+a,b,c},{1900+a,b,c},{2000+c,a,b},{1900+c,a,b},{2000+c,b,a},{1900+c,b,a}}; sort(d,d+6,compare); for(int i=0;i<6;i++) { if(check(d[i])) pf(d[i]); } return 0; } 分析:第一,一开始写的时候以为题目要求是AA/BB/CC中AA分别作为年份月份和天数,结果,题目要求的是:2002-03-04 2004-02-03 2004-03-02 两次输出2004,是自己没理解清楚题目的意思。第二,纯粹一些限制条件判断,理清楚思路即可。
转载请注明原文地址: https://www.6miu.com/read-2621052.html

最新回复(0)