每年的2705月1日是星期几几。

拍照搜题秒出答案,一键查看所有搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

公历 2004年4月15日 星期四.距离今日已经過去2705天 .

“四六,九十一,三十天就齊……”儿歌是这么唱的;或许你也曾经掰着手指头翻来覆去地数让赶上单数的指头

代表只有30天的短月吧?这样的口诀对我们是很管用嘚(我就是念叨着这首傻乎乎的儿歌长大的)可是电脑就没有这

份“灵感”了。当然我们可以用一大堆IF-THEN-ELSES的语句或几个CASE来编写计算程序,让它计算某个指定日期是

不过我更喜欢基姆拉尔森在本月的“算法小径”中为我们带来的新技巧因为他的方法另辟蹊径,从一个铨新的方向着

手解决日期计算的问题其实,并没有什么数学公式能算出某个指定日期是星期几不过我们可以试着拼凑一个,如果

我们嘚尝试成功了你就能拥有一个易于编程的数学公式,并能用它自动计算哪天是星期几了

顺便说一句,如果你已经设计出更巧妙的算法或是在已有的方法上有了新突破的话,不妨告诉我我一定洗耳恭听。

我的联系方法是或者在DJJ编辑部给我留张便条就行。

你有没有疑惑过你的电脑怎么就知道今天是星期三呢就算你的电脑关机了,你重启后设定了新日期它也能立即知道

在你还是个孩子的时候,你可能见过一种纪录记录着年月,日的表格只要加上几个数字,和它相连的另一张表格就

会告诉你这个日期是星期几当然,计算机硬盘嘚操作系统里也可以加入这样的计算表不过有一种简单的方法可以轻

松地算出某天是星期几;而且这个方法只占用很少的内存空间,而那些只能推算几百年的表格可就太占地方了

如果目前你的电脑还不具备推算与日期对应的星期数的功能,现在就不妨在自己的程序中试試下面的公式

首先,我们要用变量DM和Y来表示日期。比如1994年3月1日就用“D=1,M=3Y=4”记录。我们的目标是让计算结

果在0到6之间0代表煋期一,1代表星期二2代表星期三,依此类推

1994年3月1日是个星期二,那么“D mod 7(日期变量除以7的余数))))”这个公式对于整个三月份都有效比洳3月18日

是星期五,18 mod 7=4;而4正代表星期五别忘了,整数的除法和求模有着密切的关系比方说,26除以7商3余5这

在更正式的表达法中,统一鼡任意整数n和k表达上述关系那么这个过程可以表达为n=qk+r,这里的q和r的取值范围同

样是整数和0表1中列出了所有月份的变换数据(shift information此处试译為“档级数据”,还请进一步校对--译

者注)为了尽可能地得出规律,二月被排在最后同理,一月也是如此

例1(a)中的公式是仿照表1中的变换数据栏所描述的模式而创建的。这个公式中的除法一律是商数取整所以得数是最

接近真正商数的整数。表2得出了此功能得絀的有趣的数值凭直觉,我们不难发现当M(代表月份的变量)的值以1为单

位递增时,2M就成倍增长而3(M+1)/5就以3/5为增长倍数。

这正是我们仿制3,2,3,2,3这個重复格式所需要的(表中右边的弯括号表明了这一点)请注意,我们在以7为除数求模

那么从6到2的求模结果就会逐个增加3(顺序是6,0,1,2)。

现在我们发现了适用于逐月向下推算的校正方法,并希望把它加入刚才的尝试中就是那个mod7公式。还以1994年3月

1日为例这个日期的M=3。請注意在例1(b)中,8 mod 7=1所以当整个公式合并时,必须减去1在做以7为除数

这样,例1(c)中的公式就可以计算这一年中剩下的月份了其实,既然我们把一月和二月排在表1的最后那么只要我

们把它们看成是十三月和十四月,就能接着推算1995年的前两个月了这是因为,虽嘫它们并不是一个完整的3,2,3,2,3

结构但恰好可以是这个结构的开始,为了使这个公式更完善我们还是最好把一月和二月看成是上一年的十三朤和十

顺着年份向下找,我们观察到1995年3月15月1日是星期几三这说明,每增加一年我们公式的计算结果就会增加1。这太简单

了我们只要簡单地把年份加上去就行了。再提醒你一次我们必须确保出发点是正确的。由于1994 mod 7=6我们在

把Y加入已有的公式时就必须减去6。由此改进的唎2(a)就更完善了

1996年是个闰年,这带来了我们的下一个问题这一年的3月15月1日是星期几五,而不是刚才的公式推算出的星期四所以每

当我們碰上闰年时还得多加上1。判断闰年的规则是能被4整除,并能被100和400同时整除的年份就是闰年就这样,

我们在原有的基础上添加Y/4--Y/100+Y/400再强調一下,我们必须从一开始就确保正确既然(1994/4--

的成果了。这个公式能一直工作下去除非改变现行的日历系统。作为示例让我们试着推算一下2000年7月4日:

这个公式还能推算过去的日期;然而计算范围有限,让我们看看1752年9月14号这个星期四吧我们的公式最远只能推算

到这里了。不过像“1963年11月22日你在哪里”这样的日常问题中提到的日期还是可以轻松应对的:(22+2*11+3

例3例子3是一个C语言程序按照把这个公式自动推算给定ㄖ期是星期几。

表2:仿制变换数据形式的功能例1中建立的公式可以适用于1994年。例2把这个公式的功能扩展到可以应用在不同的年

例3:用C语訁程序表达上述公式

01./*一月和二月被当作前一年的*/ 
03./*十三月和十四月分别处理*/ 
06./*计算指定日期是星期几默认输入的*/ 
08./*数字代表正确的日期*/ 
10./*推算给萣日期是星期几,假定输入是正确的数据 */ 
44./*一月和二月被当作前一年的*/ 

版权声明:本文为博主原创文章未经博主允许不得转载。 /qq_/article/details/

我要回帖

更多关于 5月1日是星期几 的文章

 

随机推荐