题目:http://www.nocow.cn/index.php/Translate:USACO/friday
很水的一道题!为什么我的答案与答案不一样?我好像觉得给的答案错了(我很菜!)
我的代码:
var
n,i,j,k,y:integer;
w:array[0..6]of integer;
mo:array[1..12]of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
begin
assign(input,'friday.in');
reset(input);
assign(output,'friday.out');
rewrite(output);
readln(n);
y:=1900;
j:=0;
for i:=y to y+n-1 do
begin
if i mod 100<>0 then if i mod 4=0 then inc(mo[2])
else if i mod 400=0 then inc(mo[2]);
for k:=1 to 12 do
begin
inc(w[(13+j)mod 7]);
j:=(j+mo[k])mod 7;
end;
if mo[2]=29 then dec(mo[2]);
end;
for i:=1 to 6 do write(w[i],' ');
write(w[0]);
close(input);
close(output);
end.
标程:
const
md:array[1..12]of byte=(31,28,31,30,31,30,31,31,30,31,30,31);
var
s,i,mm:byte;
n,yy:word;
cn:array[1..7]of word;
begin
assign(input,'friday.in');
assign(output,'friday1.out');
reset(input);
rewrite(output);
readln(n);
s:=1;
yy:=1900;
mm:=1;
while (yy<=1900+n-1) do
begin
inc(cn[s]);
if mm<>2 then
s:=(s+md[mm]-1) mod 7+1
else
if (yy mod 4=0) and (yy mod 100<>0) or (yy mod 400=0) then
s:=(s+29-1) mod 7+1
else
s:=(s+28-1) mod 7+1;
inc(mm);
if mm>12 then
begin
inc(yy);
mm:=1;
end;
end;
for i:=1 to 6 do
write(cn[i],' ');
writeln(cn[7]);
close(output);
end.
输入一年,应该是1 3 1 2 2 2 1
按他的标程 则是2 1 1 3 1 2 2
到底是谁错了?