好吧,找了大约1个小时的错误结果发现。倒数5行。-w(x-1……c-1)打错了,应该打成-w(x-1……z-1)。T\_T哎。后悔当时写的时候太匆忙了
by 耗纸大大 @ 2016-10-01 20:15:50
这是道水题,加我QQ:2905481468
by 陌殇解说 @ 2016-11-27 21:07:17
看题目,如果从date1到date2之间的所有日期都判断一遍,把中间日期一个一个判断一遍会**很麻烦**,而且一个一个正确的日期弄出来也不容易
再考虑到每一年只可能有一个回文日期,因此我们先把date1和date2的前四位(即首尾的年份)截取出来,然后中间的每一年都**生成一个假定的回文日期**,
**判断**生成的回文日期是不是一个正确的日期,如果是就inc(ans),最后输出ans即可
```cpp
var d1,d2,make:string;
left,right,ans,i,j:longint;
y:array[0..13] of integer;
function check(k:string):boolean;//定义判断日期是否标准的函数
var year,month,day,m:longint;
begin
val(copy(k,1,4),year);//截取生成的日期的年(下同)
val(copy(k,5,2),month);
val(copy(k,7,2),day);
if ((year mod 4=0) and (year mod 100<>0)) or (year mod 400=0) then
y[2]:=29 else y[2]:=28;//判断是否是闰年,是则把二月的天数换为29,否则为28
if ((month<=0) or (month>=13)) then exit(false);//如果月份≤0或≥13,那么返回false(下同)
if ((day<=0) or (day>=(y[month]+1))) then exit(false);
exit(true);//发现满足题意的回文日期一枚,返回true!
end;
begin
y[1]:=31;y[2]:=28;y[3]:=31;y[4]:=30;y[5]:=31;y[6]:=30;y[7]:=31;y[8]:=31;
y[9]:=30;y[10]:=31;y[11]:=30;y[12]:=31;//虽然很笨,但是能把每个月的日期弄好就好了啦……⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
readln(d1);
readln(d2);
val(copy(d1,1,4),left);//起始年弄出来!
val(copy(d2,1,4),right);//结尾年弄出来!
ans:=0;
for i:=left to right do
begin
str(i,make);
for j:=4 downto 1 do
make:=make+make[j];//生成待验货的回文日期完毕!
if check(make) then inc(ans);//如果检验合格的,那么就inc(ans)!
end;
writeln(ans);//把合格品的数量输出来!
end.
```
by 陌殇解说 @ 2016-11-27 21:08:11
楼上题解好像发错地方了
by nonanalyzer @ 2017-01-30 18:58:30
???
by bestzzy @ 2017-02-12 09:58:15