首页 随笔 乐走天涯 程序资料 评论中心 Tag 论坛 其他资源 搜索 联系我 关于 RSS

823年才一次的五个星期五,五个星期六,五个星期日?


日期: 2010-10-11 07:59 | 联系我 | 关注我: Telegram, Twitter

  刚才在论坛里看到一个朋友说:“这个月(2010.10)有五个星期五五个星期六五个星期日。听说823年才能碰一次。”

  在 Google 中搜索“五个星期五,五个星期六,五个星期日”,几十页的结果,都是说 823 年才有一次。

  猛一看,很稀奇。但一较真,就经不起推敲了。这个823年是怎么算来的?为什么不是 822 年或者 824 年而一定是 823 年?想想就知道:只要有一个月是大月份(31天),那么必定有三个连续的星期单位,会被重复五次。因为: 31 = 4 x 7 + 3。

  而要出现 五个星期五,五个星期六,五个星期日,一点也不难,只要满足下面两个条件:

  1. 当月是大月份(天数是 31 天)

  2. 当月的1号,是星期五

  一年中有7个大月份(1,3,5,7,8,10,12),一个星期有7天。显然,从概率上来讲,大月1号是星期五的概率,每年能出现一次,而不是 823 年才出现一次。:D

五个星期五,五个星期六,五个星期日

  我刚写了段 php 程序验证了一下,2000年-2030年这30年来,就有29个这样的月份。其中,就在不远的过去, 2010的元月也是一个这样的月份。:)

  php 代码:

<?php
$t_iStartYear = 2000;
$t_iEndYear = 2030;
echo 'Start Year: ',$t_iStartYear,"<br>End Year: ",$t_iEndYear,"<br>";
for($t_iCount = 0, $i = $t_iStartYear; $i< $t_iEndYear; $i++)
{
  for($j=1; $j<13; $j++)
  {
    $t_strDate = sprintf('%04d-%02d-01', $i, $j);
    if ( (5==date('w',strtotime($t_strDate))) && (1==$j||3==$j||5==$j||7==$j||8==$j||10==$j||12==$j))
      echo '[',$t_iCount++,'] ',$t_strDate,': Friday',"<br>";
  }
}
?>

  php 程序的输出结果:

Start Year: 2000
End Year: 2030
[0] 2000-12-01: Friday
[1] 2002-03-01: Friday
[2] 2003-08-01: Friday
[3] 2004-10-01: Friday
[4] 2005-07-01: Friday
[5] 2006-12-01: Friday
[6] 2008-08-01: Friday
[7] 2009-05-01: Friday
[8] 2010-01-01: Friday
[9] 2010-10-01: Friday
[10] 2011-07-01: Friday
[11] 2013-03-01: Friday
[12] 2014-08-01: Friday
[13] 2015-05-01: Friday
[14] 2016-01-01: Friday
[15] 2016-07-01: Friday
[16] 2017-12-01: Friday
[17] 2019-03-01: Friday
[18] 2020-05-01: Friday
[19] 2021-01-01: Friday
[20] 2021-10-01: Friday
[21] 2022-07-01: Friday
[22] 2023-12-01: Friday
[23] 2024-03-01: Friday
[24] 2025-08-01: Friday
[25] 2026-05-01: Friday
[26] 2027-01-01: Friday
[27] 2027-10-01: Friday
[28] 2028-12-01: Friday

 文章评论

第 1 楼  发表于 2010-10-12 09:45 | charlie 的所有评论
同感,当时看到这句话就质疑了,不过我没向你一样仔细推敲,后来又看到说今年1月份也是这样的,就笑了

第 2 楼  发表于 2010-10-12 13:56 | braveheart 的所有评论
软件高手玩历法正常:D

第 3 楼  发表于 2010-10-13 01:22 | xjb 的所有评论
这就是程序员的认真。

第 4 楼  发表于 2010-10-13 15:00 | ms 的所有评论
我想想也觉得不靠谱,所以来你这儿来求证了

第 5 楼  发表于 2010-10-13 15:18 | surda 的所有评论
谬论横生!

第 6 楼  发表于 2010-10-13 17:51 | FlyFire 的所有评论
今天媒体也来讨论这个事了。有几个傻B专家在忽悠了一大堆推理来证明这个说法的错误。远不及XH这篇文章讲得简单易懂。

第 7 楼  发表于 2010-10-13 18:04 | 123 的所有评论
2021年10月就相隔823 年啦?

第 8 楼  发表于 2010-10-14 18:10 | 知足常乐 的所有评论
据说2010年的10月份是个不寻常的月份,这个月份中有5个星期五,5个星期六,5个星期日,这种情况需要823年后才能再次出现.
其实不用等那么久.2011年7月就是3个周5周6周日.往前的话2010年1月也是.很简单如果星期日正好赶上是31号的话就会出现有3个周5周6周日.尽管没仔细统计过,仅凭感觉几乎每年都有可能出现,当然每10年中也许会有1年或两年不出现,10年中出现3年或3年以上没有此现象的几率或许有但肯定不多.1年中出现两次的可能也有,
比如往前2009-05 2008-08 2006-12 2005-07 2004-10 2003-08 2002-03....往后2011-07 2013-03 2014-08 2015-05 2016-01...2021-10 2010年就出现了两次3个周5周6周日的,分别是10月和1月.
或许会有朋友问你是怎么知道的,呵呵其实很简单,本人不是什么专家,也不用什么复杂的公式,5秒钟时间你就明白并自己去找什么时候会出现.,绝对的, qq632491620 注明3个周5周6周日

第 9 楼  发表于 2010-10-14 19:22 | 河南开封我的家 的所有评论
我觉得也不太可能也是来这里求证的

第 10 楼  发表于 2010-10-14 22:33 | xiaoxiao 的所有评论
能否认识你,在北京干过几年网络安全技术,也在长沙,QQ 784103512

第 11 楼  发表于 2010-10-15 12:59 | 猴子 的所有评论
这样证明,实在是太给力了!

第 12 楼  发表于 2010-10-15 22:42 | 凌声全 的所有评论
这程序用C语言怎么写?先谢谢了!

第 13 楼  发表于 2010-10-19 17:18 | jason 的所有评论
请问这段php代码怎么用才看到输出?
回复于 2010-10-19 20:16:
在 浏览器里 或者 php shell 下都可以看得到。

第 14 楼  发表于 2010-10-22 10:57 | 梦之源泉 的所有评论
同样是怀疑,但没有研究。小辉精神可嘉!!^_^

第 15 楼  发表于 2010-10-24 22:40 | Jerry 的所有评论
不才,写了一下delphi的代码:
Quote:
  
procedure TForm1.btn1Click(Sender: TObject); 
var 
 beginYear,EndYear:Integer; 
 j,k:Integer; 
begin 
 DateSeparator := '/'; 
 beginYear := 2000; 
 EndYear   := 2100; 
 
 for j := beginYear to EndYear do 
     begin 
       for k := 1 to 12 do 
         begin 
           if (k = 1) or (k = 3) or (k = 5) or (k = 7 )  or (k = 8) or (k = 10) or (k = 12) then 
              begin 
                if DayOfWeek(StrToDate(IntToStr(j)+'/'+IntToStr(k)+'/01')) = 6   then 
                   mmo1.Lines.Add(IntToStr(j) + '--' + IntToStr(k)); 
              end; 
         end; 
     end;    
end; 

第 16 楼  发表于 2010-10-25 08:52 | 大周 的所有评论
程序员很认真的哦
学习ing

第 17 楼  发表于 2010-10-27 14:12 | goober 的所有评论
要算上闰年啊。
回复于 2010-10-28 09:59:
与闺年无关。闺年也只是2月份有29天而已,跟我说的那两个条件,扯不上关系。

第 18 楼  发表于 2010-10-31 00:07 | 期待飞翔 的所有评论
小辉哥。 我刚接触编程4个多月 现在在学C# 感觉有很多问题
有空能指点指点我么? QQ250981495

第 19 楼  发表于 2011-04-16 12:04 | 柯理思 的所有评论
赞喔,真有你的!

第 20 楼  发表于 2011-07-05 01:08 | 拜膜! 的所有评论
厉害!给力!!!!!这就是高手啊!!!

第 21 楼  发表于 2011-07-09 21:05 | lyxjfang 的所有评论
态度真值得学习,我研究一下代码看看

第 22 楼  发表于 2014-05-20 11:14 | 李新路 的所有评论
请问是否能算出8月1日正好是周五,也就是说刚巧在8月份发生5个周五,5个周六和5个周日的情况是多少年一次?

第 23 楼  发表于 2014-08-03 14:05 | 王先森 的所有评论
我就看看,我不说话

共有评论 23 条, 显示 23 条。

发表你的评论
如果你想针对此文发表评论, 请填写下列表单:
姓名: * 必填 (Twitter 用户可输入以 @ 开头的用户名, Steemit 用户可输入 @@ 开头的用户名)
E-mail: 可选 (不会被公开。如果我回复了你的评论,你将会收到邮件通知)
反垃圾广告: 为了防止广告机器人自动发贴, 请计算下列表达式的值:
10 x 1 + 3 = * 必填
评论内容:
* 必填
你可以使用下列标签修饰文字:
[b] 文字 [/b]: 加粗文字
[quote] 文字 [/quote]: 引用文字

 
首页 随笔 乐走天涯 猎户星 Google Earth 程序资料 程序生活 评论 Tag 论坛 资源 搜索 联系 关于 隐私声明 版权声明 订阅邮件

程序员小辉 建站于 1997 ◇ 做一名最好的开发者是我不变的理想。
Copyright © XiaoHui.com; 保留所有权利。