10.05.2017

Y3K

Y3K
(Tin học trẻ không chuyên TQ - 1999).

(Tin học trẻ không chuyên TQ - 1999).
Cho số nguyên N trong phạm vi từ 1000 đến 999999. Cần xác định số này có phải là thông tin về một ngày tháng có trong thế kỷ 21 không. (Thế kỷ 21 bắt đầu từ 1 tháng 1 năm 2001 và kết thúc vào ngày 31 tháng 12 năm 3000. Biết rằng 2  chữ số cuối của N là chỉ hai chữ số cuối của năm, các chữ số còn lại (ở đầu) xác định ngày và tháng.
Ví dụ:
     1111    tương ứng với 1 tháng 1 năm 2011;
     21290   tương ứng với 2 tháng 12 năm 2090 hoặc 21 tháng 2 năm 2090;
     131192 tương ứng với 13 tháng 11 năm 2092;
     32392   Không phải là thông tin về một ngày tháng nào cả;
     311198 Không phải là thông tin về một ngày tháng nào cả;
     29205   Không phải là thông tin về một ngày tháng nào cả;
Dữ liệu: Nhập vào số N từ bàn phím.
Kết quả: Đưa ra màn hình các ngày tháng năm tương ứng với N hoặc thông báo là KHONG nếu N không phải là thông tin về một ngày tháng nào cả.
Ví dụ:
    Giá trị của N          Thông báo ra màn hình tưng ứng
    1111                        1-1-2011
    21290                     2-12-2090 HOAC 21-2-2090
    29205                    KHONG
                                                            Lời giải tham khảo
uses crt;
 var
    n: string;
    y1,d1,d2,t1,t2,f,i,Hop1,hop2,w: integer;
    yo1,do1,do2,to1,to2: string;
    nhuan: boolean;
 begin
      repeat
            clrscr;
            writeln('nhap so nguyen: '); readln(w);
      until (w<1000000)and(w>1000);
      str(w,n);
      for i:=length(n)-1 to length(n) do yo1:=yo1+n[i];
      for i:=1 to 2 do do2:=do2+n[i];
      for i:=1 to 1 do do1:=do1+n[i];
      for i:=2 to length(n)-2 do to1:=to1+n[i];
      for i:=3 to length(n)-2 do to2:=to2+n[i];
      val(to2,t2,f);
      val(do2,d2,f);
      val(yo1,y1,f);
      val(do1,d1,f);
      y1:=y1+2000;
      val(to1,t1,f);
      Hop1:=0;
     nhuan:= false;
      if (y1 mod 4=0) and (y1 mod 100<>0) then Nhuan:=true;
      if y1 mod 400=0 then Nhuan:=true;
      hop1:=0;
      if (d1>0) and (d1<32) then
         if (t1>0) and(t1<13) then
            if (t1 in[4,6,9,11]) and(d1<31) then Hop1:=1 else
               if (t1=2) and (Nhuan) and (d1=29) then Hop1:=1 else
                  if (t1=2) and (d1<29) then Hop1:=1
                     else if t1 in [1,3,5,7,8,12] then hop1:=1;
      Hop2:=0;;
      if (d2>0) and (d2<32) then
         if (t2>0) and(t2<13) then
            if (t2 in[4,6,9,11]) and(d2<31) then Hop2:=1 else
               if (t2=2) and (Nhuan) and (d2=29) then Hop2:=1 else
                  if (t2=2) and (d2<29) then Hop2:=1
                     else if t2 in [1,3,5,7,8,12] then hop2:=1;;
      if (Hop1=1) and (Hop2=1) then write(d1,'-',t1,'-',y1,' HOAC ',d2,'-',t2,'-',y1)
         else if Hop1=1 then  write(d1,'-',t1,'-',y1) else
              if Hop2=1 then  write(d2,'-',t2,'-',y1) else
                 write('KHONG');
      readln;
 end.

No comments:

Post a Comment

Cảm ơn bạn đã nhận xét