天天看點

地鐵上想到的一個關于日期的問題(2009-09-22)

昨天在地鐵上,突然想到當天是21号,星期一。打開手機看了一下,2001年1月1号正好是星期一。

于是就有一個有趣的問題:那麼21世紀中(2001-2100),每個月的1号,同時又是星期一的日子大約有多少天:

A. 50 B. 150 C. 350 D. 550

當然,答案是後來設計的。

當時我考慮這個問題,每個月1号是星期一,具有随機性。按機率算,整個世紀共有100*12個1号,1/7是星期一。當時沒有用電腦,估計1200/7約為180左右。

這是今天用Python寫的代碼,運算的結果是172。

from datetime import datetime

def month1st_is_monday(start=2001, end=2100):
	num = 0
	for year in range(start, end+1):
		for mon in (range(1,13)):
			d = datetime(year, mon, 1)
			if (1==d.weekday()):
				num += 1
	return num

if '__main__' == __name__:
	print month1st_is_monday()
      

計算了一下,所有1200個一号裡面的分布是這樣的

周日  172個   周一  172個  周二  170個   周三  173個

周四  170個   周五  171個  周六 172個