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 ;

 

转载于:https://www.cnblogs.com/dabiao/archive/2010/10/24/1859909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值