您的位置:首页 > 其它

解题报告 纪念日

2011-08-07 14:22 155 查看
[/b]

1. [/b]题目[/b]

纪念日([/b]Date.pas/c/cpp[/b])[/b][/b]

题目描述[/b][/b]

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

输入数据[/b][/b]

[/b]文件第一行读入[/b]n (0<=n<=50000)[/b]

从文件的第二行分别读入[/b]YY[/b],[/b]MM[/b],[/b]DD[/b]其中[/b]1949<=YY<=1992[/b],日期绝对合法。[/b][/b]

[/b]

输出数据[/b][/b]

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

[/b]

样例输入[/b][/b]

10000[/b]

1979 4 16[/b]

[/b]

样例输出[/b][/b]

[/b]2006-9-1[/b]

[/b]

2. [/b]题目实质[/b]

模拟,日期的计算。[/b]

3. [/b]算法[/b]

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

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

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

4. [/b]注意事项[/b]

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

5. [/b]程序代码[/b]

SueMiller [/b](Pascal[/b])[/b]

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

31,31,30,31,30,31);[/b]

var n:longint;[/b]

yy,mm,dd:longint;[/b]

p:longint;[/b]

function check(y:longint):boolean;[/b]

begin[/b]

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

exit(false);[/b]

end;[/b]

begin[/b]

assign(input,'Date.in');reset(input);[/b]

assign(output,'Date.out');rewrite(output);[/b]

readln(n);[/b]

readln(yy,mm,dd);[/b]

while n>0 do [/b]

begin[/b]

p:=mon[mm];[/b]

if (mm=2) and (check(yy)) then inc(p);[/b]

inc(dd);dec(n);[/b]

if dd>p then begin dd:=1;inc(mm);end;[/b]

if mm>12 then begin inc(yy);mm:=1;end;[/b]

end;[/b]

writeln(yy,'-',mm,'-',dd);[/b]

close(input);close(output);[/b]

end.[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: