GIẢI ĐỀ THI HỌC SINH GIỎI TỈNH (BÀI 1 - ĐỀ THI HSG TIN CẤP TỈNH 2021-2022)

Cho xâu ký tự S có 4 hoặc 5 ký tự số, được quy ước như sau: hai ký tự cuối là hai chữ số cuối của một năm trong thế kỷ 21, một hoặc hai ký tự đầu cho biết ngày, các ký tự còn lại cho biết tháng.

            Giả sử: tháng 1, 3, 5, 7, 8, 10, 12 có 31 ngày, các tháng còn lại có 30 ngày, riêng tháng 2 năm thường có 28 ngày, năm nhuận có 29 ngày. Năm nhuận là năm chia hết cho 4 và không chia hết cho 100 hoặc năm chia hết cho 400.

            Viết chương trình kiểm tra xâu S (có 4 hoặc 5 ký tự số) có phải là ngày hợp lệ có dạng ngày/tháng/năm theo đúng yêu cầu bên trên, cụ thể như sau:

            Input (dữ liệu nhập) cho trong tập tin BAI01.INP là giá trị của xâu S.

            Output (dữ liệu xuất) ghi vào tập tin BAI01.OUT ngày hợp lệ được tạo ra theo yêu cầu bên trên. Trong trường hợp xâu không tạo được ngày hợp lệ thì kết quả “KHONG TAO DUOC”, trường hợp xâu S có nhiều cách tạo hợp lệ thì chỉ cần ghi ra một cách tạo hợp lệ.

            Chương trình ví dụ:

Lần thử

BAI01.INP

BAI01.OUT

1

1316

1/3/16

2

11216

11/2/16 (hoặc 1/12/16)

3

29217

KHONG TAO DUOC


CODE THAM KHẢO:
var s: string;
function day(m,y:byte): byte;
var sn: byte;
begin
        sn:=0;
        case m of
        1,3,5,7,8,10,12: sn:=31;
        4,6,9,11: sn:=30;
        2:
        if (y mod 400 = 0) or ((y mod 4 = 0) and (y mod 100 <>0)) then sn:=29
        else sn:=28;
        end;
        day:=sn;
end;
procedure tach(s:string);
var d,m,y,k: byte;
begin
        k:=0;
        val(copy(s,length(s)-1,2),y);
        if length(s) = 4 then
        begin
                writeln(s[1],'/',s[2],'/',y);
                k:=1;
        end
        else
        begin
                val(copy(s,1,2),d);
                val(copy(s,3,1),m);
                if (d<=day(m,y)) then begin write(d,'/',m,'/',y); k:=1; end;
                val(copy(s,1,1),d);
                val(copy(s,2,2),m);
                if (d<=day(m,y)) then
                begin
                        if k = 1 then writeln(' (hoac ',d,'/',m,'/',y,')')
                        else writeln(d,'/',m,'/',y);
                        k:=1;
                end;
        end;
        if k = 0 then write('KHONG TAO DUOC');
end;
begin
        assign(input,'BAI01.INP'); reset(input);
        assign(output,'BAI02.OUT'); rewrite(output);
        while not(eof(input)) do
        begin
                readln(s);
                tach(s);
        end;
        close(input); close(output);
end.



Nhãn:

Đăng nhận xét

[blogger]

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.
Javascript DisablePlease Enable Javascript To See All Widget