小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在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资源约定:
峰值内存消耗(含虚拟机) < 256MCPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。注意:
main函数需要返回0;只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数。所有依赖的函数必须明确地在源文件中 #include <xxx>
分析:
1. 设置一个日期类(感觉日期问题这样写不错),编写判断日期格式函数,自定义排序
2. 输入可以用 scanf("%d/%d/%d") 直接输入整型数
3. insert(年, 月, 日) , insert(日,月,年), insert(日,年,月), 可以插入到set中,自动进行删选重复和进行排序
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int mon_day[]={ 0,31,28,31,30,31,30,31,31,30,31,30,31}; 9 10 class Date{11 public:12 Date(int y=0,int m=0,int d=0):year(y),month(m),day(d){}13 bool isLeap(int year){14 return (year%4==0&&year%100!=0)||(year%400==0);15 }16 /*重载 <号排序* 17 bool operator<(const date& b) const{18 if(this-> year==b.year){19 if(this->month==b.month){20 return this->day month 号排序*>year 2059) return false;29 if(isLeap(year)){ //是闰年30 if(month<=0||month>12) return false;31 if(month==2) day<=mon_day[month]+1;32 return day>=1&&day<=mon_day[month];33 }34 else{ //不是闰年35 if(month<=0||month>12) return false;36 return day>=1&&day<=mon_day[month];37 }38 }39 40 public:41 int year;42 int month;43 int day;44 };45 /*46 class flag{//自定义排序47 public:48 bool operator()(Date a,Date b){49 if(a.year==b.year){50 if(a.month==b.month){51 return a.day ss;61 void Insert(int y,int m,int d){62 Date dd(y,m,d);63 if(dd.valid()){64 ss.insert(dd);65 }66 }67 68 int main(){69 int y,m,d;70 scanf("%d/%d/%d",&y,&m,&d);71 //年月日72 Insert(1900+y,m,d);73 Insert(2000+y,m,d);74 //日月年75 Insert(1900+d,m,y);76 Insert(2000+d,m,y);77 //月日年78 Insert(1900+d,y,m);79 Insert(2000+d,y,m);80 81 set ::iterator it;82 for( it=ss.begin(); it!=ss.end(); it++ ){83 printf("%d-%02d-%02d\n",(*it).year,(*it).month,(*it).day);84 }85 return 0;86 }