日期查找
#include <iostream> #include <algorithm> #include <map> using namespace std; int month[13][2] = { {0,0}, {31,31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31} }; //判断是否为闰年 bool isLeap(int year) { if(year%4==0 && year%100!=0 || year%400==0) return true; else return false; } //求两个日期的差值 int gapDate(int time1, int time2) { int y1, m1, d1, y2, m2, d2; int date1 = time1, date2 = time2; if(date1 > date2) //第一个日期如果晚于第二个日期则交换 swap(date1, date2); y1 = date1 / 10000, m1 = date1 % 10000 / 100, d1 = date1 % 100; y2 = date2 / 10000, m2 = date2 % 10000 / 100, d2 = date2 % 100; int ans = 1; //记录结果; //第一个日期没有达到第二个日期时进行循环; //即:!(y1==y2) && (m1==m2) && (d1==d2) while(y1<y2 || m1<m2 || d1<d2) { d1++; if(d1 == month[m1][isLeap(y1)] + 1) { m1++; d1 = 1; } if(m1 == 13) { y1++; m1 = 1; } ans++; } return ans; } int main() { int time, day; map<int, int> mp; cin>>time; while(time != 0000) { day = gapDate(20221225, time); mp[day] = time; cin>>time; } map<int, int>::iterator it = mp.end(); for(int i=0; i<3; i++) { it--; cout<<it->second<<endl; } cout<<endl; return 0; }