解题报告 纪念日

 

1.        题目

纪念日(Date.pas/c/cpp

题目描述

    新兵入队的日子YYMMDD日,他们觉得这个日子特别有意义,所以决定过n天搞一次活动来纪念这个日子,可是他们不知道n天后是什么日子,所以请你帮忙计算一下日期(入队日算第0天)。

 

输入数据

     文件第一行读入n    (0<=n<=50000)

从文件的第二行分别读入YYMMDD其中1949<=YY<=1992,日期绝对合法。

 

输出数据

    输出文件只有一行,即CCC老师生日第一万天以后的日期,格式为 “Y-M-D”

 

样例输入

10000

1979 4 16

 

样例输出

    2006-9-1

 

2.        题目实质

模拟,日期的计算。

3.        算法

模拟。这个要用真正的模拟来做,一天天的往下数,反正只有几万天,不会超时。

事实上,对于日期类模拟来说,这无疑是最简单最有效的方法。

如果有兴致,当然也可以按照数学方法来一块时间一块时间的算,错了后果自负。

4.        注意事项

只要判断一下,这个只不过是一个进制有点变态的进位加法。

5.        程序代码

SueMiller Pascal

const mon:array[1..12]of integer=(31,28,31,30,31,30,

                                  31,31,30,31,30,31);

var n:longint;

    yy,mm,dd:longint;

    p:longint;

function check(y:longint):boolean;

begin

  if ((y mod 4=0) and (y mod 100<>0)) or(y mod 400=0) then exit(true);

  exit(false);

end;

begin

  assign(input,'Date.in');reset(input);

  assign(output,'Date.out');rewrite(output);

  readln(n);

  readln(yy,mm,dd);

  while n>0 do

    begin

      p:=mon[mm];

      if (mm=2) and (check(yy)) then inc(p);

      inc(dd);dec(n);

      if dd>p then begin dd:=1;inc(mm);end;

      if mm>12 then begin inc(yy);mm:=1;end;

    end;

  writeln(yy,'-',mm,'-',dd);

  close(input);close(output);

end.

原文地址:https://www.cnblogs.com/SueMiller/p/2129994.html