万年历
问题
请给出未来指定的某年(如 2020)的全年日历。使用字符串输出,仿照常见日历的格式,按年月分隔,包含日期和星期信息。
思路
大致思路:循环十二个月,首先计算月标题和星期标题添加到万年历,然后循环月中的所有天,按周拼接日期,日期间隔为 \t,一周拼接结束把结果追加到万年历,然后继续下一周。
-
定义年份、结果万年历序列,计算 1 月 1 日位于星期几
-
循环十二个月,设置每个月的标头栏
-
循环当前月的天数,按周拼接字符串
-
一周拼接结束把结果追加到万年历,然后继续下一周
-
一个月循环结束,把该月最后不满一周的字符串追加到万年历
代码
A | B | C | D | ||
---|---|---|---|---|---|
1 | 1984 | =[string(A1)+ "年"] | 存放结果万年历 | ||
2 | =day@w(date(A1,1,1)) | 存储循环过程中的当前日位于一个星期的第几天,初始为 1 月 1 日 | |||
3 | for 12 | >B1=B1|["\n","\t\t\t"+string(date(A1,A3,1),"MMMM"),"日 \t 一 \t 二 \t 三 \t 四 \t 五 \t 六"] | 循环月份,设置每个月的标头栏 | ||
4 | =fill("\t",A2-1) | 存放循环过程中当前周字符串,每月第一周要拼上第一天的缩进 | |||
5 | for days(date(A1,A3,1)) | 循环当前月的所有天,按周将日拼接到当前周字符串 B4 中 | |||
6 | >A2=A2+1 | ||||
7 | >B4=B4+string(B5) | ||||
8 | if A2==8 | >A2=1 | 一周循环完则回到周一 | ||
9 | >B1=B1|B4 | 将循环完的周字符串添加到万年历 | |||
10 | >B4="" | ||||
11 | else | >B4=B4+"\t" | 否则拼接 \t 作为日间分隔符 | ||
12 | if B4!="" | >B1=B1|B4 | 每月的最后一周可能不满 7 天,也要拼接到万年历 |
英文版