小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。
如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020年10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
为什么两种代码运行结果不一样。
#include
using namespace std;
int main()
{
int year = 2000, month = 1, day = 1, weak = 6;
int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int n = 2;
for (int i = 1; i < 10000; ++i)
{
day++;
weak++;
weak%=7;
n++;
if (day == days[month] + 1)
{
day = 1;
month++;
if (month == 13)
{
month = 1;
year++;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
days[2] = 29;
else
days[2] = 28;
}
}
if (weak == 1 || day == 1)
n++;
if (year == 2020 && month == 10 && day == 1)
break;
}
cout << weak << endl;
cout << n+2;
return 0;
}
//2
#include
using namespace std;
int main()
{
int year = 2000, month = 1, day = 1, weak = 6;
int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int n = 2;
for (int i = 1; i<20000; ++i)
{
day++;
weak++;
weak %= 7;
n++;
if (day==days[month]+1)
{
month++;
day = 1;
}
if (month ==13)
{
year++;
month = 1;
}
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
days[2] = 29;
else
days[2] = 28;
if (weak == 1 || day == 1)
n++;
if (year == 2020 && month == 10 && day == 1)
break;
}
cout << n;
return 0;
}
一个weak=4,n=8879,一个weak=3,n=8877;
尝试输出i值,第二种比第一种少了一次但是根据代码看不出问题在哪里。
我认为两种代码逻辑是一样的,我想知道输出结果为什么不一样,如果有关于日期题目更好的解决方法欢迎回答。
你的代码逻辑有问题
第一段代码是在moth==13才计算闰月,所以第一年他没有计算,
第二段代码是每次循环都要计算闰月,所以正确