Crane


Search
Loading

分类

随机文章

标签云
ArchLinux
Earth
Fringe
Gtalk
Internet
LFS
Love
RegEx
STL
Trick
VHDL
abs
c
c++
code
css
echofon
firefox
fun
g++
game
gcc
geek
google
grep
hack
linux
math
md5
nginx
php
program
python
reader
script
sed
shell
tcpdump
usaco
vim
vimperator
virus
wikipedia
windows
二进制
位运算
危机边缘
哥德尔
大牛
希尔伯特
数据结构
日期
时间
星期五
正则表达式
漫画
生活
电影
程序员
算法
维基
编程
网络
美剧
菜鸟
越狱
输入法
黑色

最新评论

链接

功能

黑色星期五
在西方人看来,星期五本就是个不好的日子,大概是因为人们认为是这天是耶稣被 害的日子吧!因此这天在西方人看来是不吉利的,甚至有些人不起床,不出去,怕遇到霉运。同样的,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;
}
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号落在星期五的次数是最多的。