第一步:计算一下从2000年1月1日到2020年10月1日一共有多少天:
#include<bits/stdc++.h>
using namespace std;
int day;
bool is_leap(int y)
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)return true;
return false;
}
int main()
{
int y = 2000, m = 1, d = 1;
while (!(y == 2020 && m == 10 && d == 1))
{
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;
d = 1;
}
if (m == 4 || m==6 || m == 9 || m == 11)
{
if (d == 31)
{
m++;
d = 1;
}
}
if (is_leap(y) && m == 2)
{
if (d == 30)
{
m++;
d = 1;
}
}
if (!is_leap(y) && m == 2)
{
if (d == 29)
{
m++;
d = 1;
}
}
day++;
}
cout << "天数:"<<day<< endl;
return 0;
}
验证
注意计算器计算的天数是不包含后面那个日期当天的,所以正确的天数应该+1。这里应该是7580.
验证
10月1号到10月4号应该是4天。
所以我们代码计算的结果也应该+1,是7580天。
第二步:对于周一和每月初一进行特殊处理
int week_num = 6; //2000.1.1是周六
while()
{
week_num++;
if (week_num == 8)week_num = 1; //周八变周一
if (week_num == 1 || d == 1)sum += 2;
}
验证
题目已经说了2020.10.1是周四,我们程序结束后输出一下看week_num是否为周四即可:
最终代码====================================================
#include<bits/stdc++.h>
using namespace std;
int day,sum;
bool is_leap(int y)
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)return true;
return false;
}
int main()
{
int y = 2000, m = 1, d = 1;
int week_num = 6; //2000.1.1是周六
while (!(y == 2020 && m == 10 && d == 1))
{
//这里一定要放在 week_num++ 前面,包含2000.1.1这个日期
if (week_num == 1 || d == 1)sum += 2;
else sum += 1;
week_num++;
if (week_num == 8)week_num = 1; //周八变周一
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;
d = 1;
}
if (m == 4 || m==6 || m == 9 || m == 11)
{
if (d == 31)
{
m++;
d = 1;
}
}
if (is_leap(y) && m == 2)
{
if (d == 30)
{
m++;
d = 1;
}
}
if (!is_leap(y) && m == 2)
{
if (d == 29)
{
m++;
d = 1;
}
}
day++;
}
cout << "天数:"<<day+1<< endl;
cout << "最后那天是星期几:"<<week_num << endl;
cout << "跑的里程数:" << sum+2 << endl; //最后要+2,是因为没有包含2010.10.1
return 0;
}