Crane
Table_bottom

Search
Loading
Table_bottom

分类
Table_bottom

随机文章
Table_bottom

标签云
Table_bottom

最新评论
Table_bottom

链接
Table_bottom

功能
Table_bottom

黑色星期五

在西方人看来,星期五本就是个不好的日子,大概是因为人们认为是这天是耶稣被 害的日子吧!因此这天在西方人看来是不吉利的,甚至有些人不起床,不出去,怕遇到霉运。同样的,13也是个不吉利的数字,因为传说背叛耶稣的传道者犹大是最后的晚餐中的第13个客人,所以西方人竭力避免13号的出现,像有没有球员愿意穿13号球衣,80%的楼层没有13层,机场漏过13号门等等。而如果星期五和13号是一天的时候,更被认为是特大倒霉日,人们称为黑色星期五,这两个代表坏运气的个体的结合被人们认为是超级不幸的一天。

呵呵,不过突然发现今年的2-14情人节之前的星期五正好是13号,不知道这个黑色星期五会不会影响西方人的情人节心情呢,还能不能Happy Valentine's Day 呢!

不过其实黑色星期五出现的时候是不少的,否则那个著名的黑色星期五病毒不是少有发作的机会了吗,你说一个病毒怎么会安安静静地待在里而不发作呢?

怎么验证呢,其实说难也不难,可以利用Zeller公式计算一下13号落在星期五的次数,像USACO上就有一个题是干这无聊的事的(那个Friday the thirteenth),像这样的C代码便可以办到,从friday.in中读入一个整数,这里是400(因为每400年是历法的一个循环),然后计算从1900开始的400年内所有的13号落在每天的次数,把结果写在friday.out中。

 

#include<stdio.h>
main()

{

        int days[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
                                        {0,31,29,31,30,31,30,31,31,30,31,30,31}};
        int monthcode[13]={0};
        int week[7]={0};
        int i,j,n,year,isleap;
        freopen("friday.in","r",stdin);
        freopen("friday.out","w",stdout);
        scanf("%d",&n);
        for(i=0;i<n;i++){
                year=1900+i;
                isleap=year%400==0?1:(year%100==0?0:(year%4==0?1:0));
                for(j=1;j<=12;j++){
                        monthcode[j]=(days[isleap][j-1]+monthcode[j-1])%7;
                }
                monthcode[0]=(monthcode[12]+days[isleap][12])%7;
                for(j=1;j<=12;j++){
                        week[(monthcode[j]+13)%7]++;
                }
        }
        for(j=6,i=1;i<=7;i++){
                printf("%d%c",week[j],(i!=7?32:'\n'));
                j++;
                j%=7;
        }
        return 0;
}
 

现在打开friday可以发现(下面的结果略有排版,数字表示的是这400年来13号落在这一天的次数):

  • Sunday     687
  • Monday     685
  • Tuesday    685
  • Wednesday  687
  • Thursday   684
  • Friday     688
  • Saturday   684

仔细看一下,其实13号落在星期五的次数是最多的。