题目要求(小高组)

已知1900年1月1日是星期一,小希想快速知道今年2029年6月7日是星期几?如果想知道1900年1月1日以后的任意一天是星期几该怎么办?请你编写一个程序来帮帮小希吧。

具体要求:

1.准备工作

(1)采用默认的小猫角色,隐藏角色;

(2)采用默认白色背景;

2.功能实现

(1)输入2029年6月7日,程序以说的形式输出2029年6月7日是星期几?(星期一至星期日分别以数字1~7输出)

(2)输入1900年1月1日以后的任意一天,程序以说的形式输出是星期几?

样例输入1:20290607

样例输出1:20290607是星期4。

样例输入2:20251114

样例输出2:20251114是星期5。


解析

这道题如果改变一下,已知1900年1月1日是星期一,再过2014天是星期几?是不是就很简单了,这不就是我们小学数学中的一个典型的周期问题么。

青少儿编程等级考试/Scratch小高组复赛真题-万年历

那么原题输入的是一个日期,我们其实要计算的就是这个日期距离1900年1月1日一共差了多少天,然后用这个数字除以7取余数,就可以知道未来的指定日子是星期几了。

这样我们的解题目标就是计算2个日期之间一共差多少天,计算两个日期差多少天,我们可以分为三步:

1、两个日期间差多少个整年【重点要考虑闰年的计算】。

平年一年有365天,闰年一年有366天,两个日期间差多少个整年,其中有多少平年,多少闰年,我们就可以把年份差的这些天数给算出来了。

2、还差多少个整月【判断是不是润年】

有多少个整月,用来计算月份间的天数,这里涉及到当前年份是平年还是闰年,平年的2月28天,闰年的2月29天,还要考虑大月(31天),小月(30天),可以用列表存储对应月份的天数,这样我们就可以将月份差的天数给算出来。

3、最后计算还剩余天数

最后是算这个日期是当前月份的第几天,计算还剩余天数。

将这些天数加在一起,我们就可以算出一共有多少天了。


实现步骤:

1、新建变量“年”、“月”、“日”、“平年”、“闰年”、“总天数”、“i”、“n”;

青少儿编程等级考试/Scratch小高组复赛真题-万年历

新建列表“每月天数”,对列表初始化,一年中只有二月的天数不固定,我们留空。

青少儿编程等级考试/Scratch小高组复赛真题-万年历

2、输入日期,将日期拆分到变量“年”、“月”、“日”中,前4位是年,5-6位是月,7-8位是日,这是最简单的拆分方法;当然还可以通过数学的方法进行拆分(提示:取模、取余)

青少儿编程等级考试/Scratch小高组复赛真题-万年历

3、计算差多少个整年(区分平年闰年),得到对应的总天数

青少儿编程等级考试/Scratch小高组复赛真题-万年历

4、计算差多少个整月,并加入到总天数

青少儿编程等级考试/Scratch小高组复赛真题-万年历

5、加入剩余的天数到总天数

6、根据周期问题计算并得到结果

青少儿编程等级考试/Scratch小高组复赛真题-万年历

运行测试:

青少儿编程等级考试/Scratch小高组复赛真题-万年历

青少儿编程等级考试/Scratch小高组复赛真题-万年历

完整参考代码

青少儿编程等级考试/Scratch小高组复赛真题-万年历


本站内容未经许可,禁止任何网站及个人进行转载。