zoukankan      html  css  js  c++  java
  • 823年才一次的五个星期五,五个星期六,五个星期日?

    刚在程序员小辉网站上看到的:

    刚才在论坛里看到一个朋友说:“这个月(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

    不才,写了一个delphi的代码验证:

    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;

  • 相关阅读:
    [考试反思]0904NOIP模拟测试37:守望
    游戏:最短路,拆点
    [考试反思]0903NOIP模拟测试36:复始
    [考试反思]0902NOIP模拟测试35:摆动
    长寿花:dp
    [考试反思]0901NOIP模拟测试34:游离
    赤壁情:dp
    [考试反思]0829NOIP模拟测试33:仰望
    [考试反思]0828NOIP模拟测试32:沉底
    宅男计划:单峰函数三分
  • 原文地址:https://www.cnblogs.com/dabiao/p/1859909.html
Copyright © 2011-2022 走看看