文章目录
题目:已知1900年1月1日是星期一,求2019年10月的日历。
1.已知1900.1.1是星期一,那么2019.10.1是星期几呢?
我们来利用循环推导一下,不要怕麻烦,多写几遍自然会得出规律的!
天数(第几天) 星期几
1900.1.1 1 星期1
1900.1.2 2 星期2
1900.1.3 3 星期3
1900.1.4 4 星期4
1900.1.5 5 星期5
1900.1.6 6 星期6
1900.1.7 7 星期0
1900.1.8 8 星期1
1900.1.9 9 星期2
1900.1.10 10 星期3
1900.1.11 11 星期4
1900.1.12 12 星期5
1900.1.13 13 星期6
1900.1.14 14 星期0
1900.1.15 15 星期1
1900.1.16 16 星期2
...
截止到这里,我们能发现,经过不懈努力我们肯定能够推算出 2019.10.1 是星期几,但我们肯定不会一直的往下推导了!
我们发现了一个规律:天数%7 等于 星期几
2.从1900.1.1 到 2019.10.1 有多少天呢?
我们拆分一下:
a.1900 —— 2018 整个年份包含多少天?(即1900.1.1 —— 2018.12.31)。
b.2019.1 —— 2019.9 整个月份包含多少天?(即2019.1.1 —— 2019.9.30)。
c.最后 +1 天就是 2019.10.1 这一天了。
我们可以发现,a.b两个步骤都需要用循环来实现。那么循环操作 和 循环条件 是怎样的呢?先不要接着往下看,暂停一下,自己思考一下~!
代码如下:
a.1900.1.1 - 2018.12.31 整年天数
//一年有365/366天;闰年是366天
for (i = 1900; i < years; i++) {
//如果一个年份能够4整除且不能被100整除 或 一个数字能被400整除
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
days += 366;
} else {
days += 365;
}
}
b.2019.1.1 - 2019.9.30 整月天数
//12个月份中:1.3.5.7.8.10.12月为31天;2月分为闰年29天/非闰年28天;4.6.9.11月为30天
for (i = 1; i < months; i++) {
if (i == 2) {
if ((years % 4 == 0 && years % 100 != 0) || years % 400 == 0) {
days += 29;
} else {
days += 28;
}
} else {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days += 31;
break;
case 4:
case 6:
case 9:
case 11:
days += 30;
break;