想脱单吗?请看末日算法:2199年7月2日是星期几

326 阅读3分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战

前言

上个世纪,自从约翰.康威教授(任职于美国新泽西州普林斯顿大学数学系)发明了末日算法后,为不少男士提供了泡妞之必备秘籍。

“美丽的女士,请告诉我您的生日,让我猜猜是星期几”

“请您随便说一个年份,我会猜出当年的情人节是星期几”

这些话虽然听起来很肉麻,但能一下子吸引住对方的注意力,接下来,为大家介绍其中的原理

何为闰年

两大规律准则:

  1. 如果年份能被4整除,但不能被100整除,便是闰年
  2. 如果年份能被100整除,又能被400整除,便是闰年

比如 1900年,能被100整除,但不能被400整除,故为平年

何为末日

威廉教授的末日算法运行原理非常简单

平年时,将2月28日设置为“末日”

到了闰年,便将2月29日设置为末日

只要知道末日是星期几,便能很快地算出同年的其他月份日期为星期几,其规律如下所示:

image.png

上面列举的月日,与“末日”星期相同。因为这些日期与“末日”的日数差都是7的整数倍,感兴趣的读者可以通过日历计算。

比如,2021年2月28日是星期天,你可以问别人,知道2021年圣诞节是星期几吗?同时,你可以迅速得出,12月12日也是星期天,那么12 + 7*2 = 26,26日那天也是星期天,圣诞节25日便是星期六

“末日”算法规律

“末日”的星期每跨1年都会加1,若遇到闰年便加2。例如,1900年的“末日”是星期三,那么1901年的“末日”是星期四,1902年的“末日”是星期五,1903年的“末日”是星期六,而1904年的“末日”是星期一

如何求取2199年7月2日是星期几

我们以2021年作为基准年,根据“末日”算法规律,便能很快求出2199年7月2日是星期几的答案

var sum = 0
for (let i = 2022; i < 2200; i++) {
        if (i % 100 === 0 ) {
                if (i % 400 === 0) {
                        sum += 2
                } else {
                        sum += 1
                }
        } else if (i % 4 === 0) {
                sum += 2
        } else {
                sum += 1
        }
}

控制台输出221

221%7余4,我们可以得出2199年2月28日为星期四,那么同年7月11日也是星期四,11-7=4得出7月4日也为星期四,最后我们得出2199年7月2日是星期二。是不是感觉很酷,感兴趣的同学可以查看日历,自己动手试试哦~