中易网

p语言:USACO1.1一道水题的问题!!

答案:1  悬赏:0  
解决时间 2021-04-27 08:00
  • 提问者网友:纹身骑士
  • 2021-04-26 15:13

题目: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

 

到底是谁错了?

 

最佳答案
  • 二级知识专家网友:不服输就别哭
  • 2021-04-26 16:23

你的输出错了


for i:=1 to 6 do write(w[i],' ');
    write(w[0]);


题目要求是输出  星期六、日、一、二、三、四、五


而你输出的是  星期一、二、三、四、五、六、日

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息