黑色星期五
譯 by 孖哥
13號又是星期五是一個不尋常的日子嗎?
?
13號在星期五比在其他日少嗎?為了回答這個問題,寫一個程序來計算在n年里13
日落在星期一,星期二......星期日的次數.這個測試從1900年1月1日到
1900+n-1年12月31日.n是一個非負數且不大于400.
這里有一些你要知道的:
1900年1月1日是星期一.
4,6,11和9月有30天.其他月份除了2月有31天.閏年2月有29天,平年2月有28天.
年份可以被4整除的為閏年(1992=4*498 所以 1992年是閏年,但是1990年不是閏年)
以上規則不適合于世紀年.可以被400整除的世紀年為閏年,否則為平年.所以,1700,1800,1900和2100年是平年,而2000年是閏年.
請不要預先算好數據!
PROGRAM NAME: friday
INPUT FORMAT
一個整數n.
SAMPLE INPUT (file friday.in)
20
OUTPUT FORMAT
七個在一行且相分開的整數,它們代表13日是星期六,星期日,星期一.....星期五的次數.
SAMPLE OUTPUT (file friday.out)
36 33 34 33 35 35 34
總的來說,由于總共N才是400年,我就是一天一天直接枚舉的,都算出來了
#include?
"
stdlib.h
"
#include?
"
stdio.h
"
int
?mon[
13
]
=
{
0
,
31
,
28
,
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
}
;

int
?ans[
8
]
=
{
0
}
;
int
?n,end;

void
?work()

{
????
int
?y,m,d;
????
int
?i;
????
int
?w
=
1
;
????y
=
1900
;
????end
=
y
+
n
-
1
;
????m
=
d
=
1
;
????
while
(y
!=
end
||
m
!=
12
||
d
!=
31
)

????
{
????????
if
(d
==
mon[m]
+
1
)

????????
{
????????????d
=
1
;
????????????m
++
;
????????}
????????
if
(m
==
13
)

????????
{
????????????y
++
;
????????????m
=
1
;
????????????
if
((y
%
100
&&
y
%
4
==
0
)
||
y
%
400
==
0
)

????????????
{
????????????????mon[
2
]
=
29
;
????????????}
????????????
else
????????????????mon[
2
]
=
28
;
????????}
????????
if
(d
==
13
)
????????????ans[w]
++
;
????????w
++
;
????????w
=
(w
-
1
)
%
7
+
1
;
????????d
++
;
????}
????printf(
"
%d?%d?
"
,ans[
6
],ans[
7
]);
????
for
(i
=
1
;i
<=
4
;i
++
)
????????printf(
"
%d?
"
,ans[i]);
????printf(
"
%d\n
"
,ans[
5
]);
}
int
?main()

{
????freopen(
"
friday.in
"
,
"
r
"
,stdin);
????freopen(
"
friday.out
"
,
"
w
"
,stdout);
????scanf(
"
%d
"
,
&
n);
????work();
????exit(
0
);
}