pascal‘大侠 帮小弟找程序的错误’

来源:百度知道 编辑:UC知道 时间:2024/09/28 11:49:53
usaco题目:
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年是闰年。
var n,i,j:longint;
a:array[0..6]of longint;
m:array[1..1000]of longint;
begin
read(n);
for i:=0 to 6 do
a[i]:=0;
for i:=1 to 1000 do
m[i]:=0;
for i:=1 to n do
for j:=1 to 12 do
case j of
1:if i<>1 then m[(i-1)*12+j]:=m[(i-1)*12+j-1]+31
else m[(i-1)*12+j]:=m[(i-1)*12+j-1]+13;
2:m[(i-1)*12+j]:=m[(i-1)*12+j-1]+31;
3:if ((1990+i-1) mod 4=0)
and((1990+i-1)mod100<>0)
or((1990+i-1) mod 400=0)

白痴啊!!!
是1900年,
不是1990年。
我辛辛苦苦慢慢的看下来,
终于早到了。

pascal语言:
Const
b:array[1..11] of integer = (31,28,31,30,31,30,31,31,30,31,30);
c:array[1..11] of integer = (31,29,31,30,31,30,31,31,30,31,30);
Var
n,s,year,p,v,i,day,k,q,g:longint;
a:array[1..7] of integer;
procedure unleap;
begin
Day:=(v+(12 mod 7)) mod 7;
if day=0 then day:=7;
a[day]:=a[day]+1;
for q:=1 to 11 do
begin
g:=b[q] mod 7;
if g=0 then g:=7;
day:=(day+g) mod 7;
if day=0 then day:=7;
A[day]:=a[day]+1;
end;
end;
procedure leap;
begin
Day:=(v+(12 mod 7)) mod 7;
if day=0 then day:=7;
a[day]:=a[day]+1;
for q:=1 to 11 do
begin
g:=c[q] mod 7;
if g=0 then g:=7;
day:=(day+(c[q] mod 7)) mod 7;
if day=0 then day:=7;
A[day]:=a[day]+1;
end;
end;
Begin
Assign(input,'friday.in');
reset(inp