NOIP2016 第二题 回文日期

13 篇文章 0 订阅

题目:

这里写图片描述

题解:

我们可以先做出60%,这很简单:只要判断回文;
后40%判断日期。

代码:

var date1,date2,i,j,k,ans,t,y1,y2,m1,m2,d1,d2,xm,xd,ym,yd:longint;
    a,y:array[0..13] of integer;
procedure main(dt:longint);
var t:boolean;
    i:longint;
begin
  i:=0;
  while dt>0 do
    begin
      inc(i);
      a[i]:=dt mod 10;
      dt:=dt div 10;
    end;
    t:=true;
    for i:=1 to 4 do
      if a[i]<>a[9-i] then t:=false;
      if t=true then inc(ans);
end;
begin
  read(date1);
  read(date2);
  ans:=0;
  if date1=date2 then
  begin
    main(date1);
    write(ans);
  end else
  begin
    y1:=date1 div 10000; m1:=date1 div 100-y1*100; d1:=date1 mod 100;
    y2:=date2 div 10000; m2:=date2 div 100-y2*100; d2:=date2 mod 100;
    y[1]:=31; 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;
    for i:=y1 to y2 do
    begin
      if (i mod 4=0)and(i mod 100<>0)or(i mod 4=0)and(i mod 400=0) then
      y[2]:=29 else y[2]:=28;
      if (i=y1)and(y1=y2) then begin xm:=m1;ym:=m2; end else
      if i=y1 then begin xm:=m1; ym:=12; end else
      if i=y2 then begin ym:=m2; xm:=1; end else
      begin xm:=1; ym:=12; end;
      for j:=xm to ym do
      begin
        if (i=y1)and(y1=y2)and(j=m1)and(m1=m2) then
        begin xd:=d1;yd:=d2; end else
        if (i=y1)and(j=m1) then begin xd:=d1; yd:=y[j]; end else
        if (i=y2)and(j=m2) then begin yd:=d2; xd:=1; end else
        begin xd:=1; yd:=y[j]; end;
        for k:=xd to yd do
        begin
          t:=i*10000+j*100+k;
          main(t);
        end;
      end;
    end;
    write(ans);
  end;
end.














  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值