和这道题一模一样,都是日期类板子题:3218. 日期计算 非常简单的日期模拟题 一遍过 - 掘金 (juejin.cn)
手动模拟一下翻日历即可:
#include<bits/stdc++.h>
using namespace std;
bool is_leap(int y)
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)return true;
return false;
}
int main()
{
int y= 2014, m = 11, d= 9;
int cnt = 0, day = 1000;
while (cnt != day)
{
d++;
if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
{
if (d == 32)
{
m++;
d = 1;
if (m == 13)
{
y++;
m = 1;
}
}
}
else if (m == 4 || m == 6 || m == 9 || m == 11)
{
if (d== 31)
{
m++;
d= 1;
if (m == 13)
{
y++;
m = 1;
}
}
}
else if (m == 2 && is_leap(y))
{
if (d == 30)
{
m++;
d = 1;
if (m == 13)
{
y++;
m = 1;
}
}
}
else if (m == 2 && !is_leap(y))
{
if (d == 29)
{
m++;
d = 1;
if(m == 13)
{
y++;
m = 1;
}
}
}
cnt++;
}
cout << y << " "<<m <<" "<< d << endl;
return 0;
}
第二个板子
#include<bits/stdc++.h>
using namespace std;
int months[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int main()
{
int y = 2014, m = 11, d = 9, day;
for (day=0; day <1000; day++)
{
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) months[2] = 29;
else months[2] = 28;
d++;
if (d > months[m])
{
d = 1;
m++;
}
if (m > 12)
{
m = 1;
y++;
}
}
printf("%04d-%02d-%02d", y, m, d);
return 0;
}