Dữ liệu: Đọc từ file văn bản SONT.INP, gồm nhiều phương án, mỗi phương án trên 1 dòng, trên dòng đó ghi 1 số nguyên dương N 0 < N... Mã nguồn để tham khảo – tệp BACS.PAS.[r]
(1)LUYỆN THI HỌC SINH GIỎI Môn: TIN HỌC THCS Thời gian làm bài: 150 phút ĐỀ TỔNG HỢP SỐ 0203 (Từ đề thi Kiên Giang, 2014) Tổng quan TT Tên bài Ba chữ số Dãy Hoán vị Số nguyên tố Tệp chương trình BACS.PAS DAYCON.PAS HOANVI.PAS SONT.PAS Tệp liệu Tệp kết BACS.INP DAYCON.INP HOANVI.INP SONT.INP BACS.OUT DAYCON.OUT HOANVI.OUT SONT.OUT Thời gian 1s/test 1s/test 1s/test 1s/test Bài (5 điểm) BA CHỮ SỐ Với ba chữ số a, b, c (0 < a <= 9, <= b, c <= 9), người ta tạo số số abc cách viết liên tiếp ba chữ số a, b, c đó liền Yêu cầu: Kiểm tra xem hệ thức sau đây có đúng không: abc = a3 + b3 + c3 Dữ liệu: cho tệp BACS.INP, gồm nhiều phương án, phương án trên dòng, trên dòng đó ghi chữ số a, b, c Kết quả: Đưa màn hình và ghi tệp BACS.OUT, phương án ghi trên dòng, trên dòng đó ghi số TL với giá trị là hệ thức nêu trên là sai, là hệ thức trên là đúng Tiếp sau đó, TL = thì ghi hệ thức abc = a3 + b3 + c3, trái lại ghi hệ thức abc != a3 + b3 + c3, các hệ thức đó phải để cặp ngoặc vuông (xem ví dụ) Ví dụ: BACS.INP 123 371 BACS.OUT [123 != 1^3 + 2^3 + 3^3] [371 = 3^3 + 7^3 + 1^3] Bài (5,5 điểm) DÃY CON Cho dãy A gồm N số nguyên Dãy B gồm M phần tử liên tiếp dãy A (M <= N) Yêu cầu: Tìm dãy B có tổng các phần tử là lớn Dữ liệu: Đọc từ tệp DAYCON.INP, gồm nhiều phương án, phương án trên dòng, trên dòng đó ghi số nguyên dương N và M, tiếp đó là N phần tử dãy A Kết quả: Ghi màn hình và ghi tệp DAYCON.OUT, phương án ghi trên dòng, trên dòng đó ghi vị trí vị trí đầu, vị trí cuối và tổng các phần tử mảng B tìm (vị trí tính theo mảng A) Ví dụ: DAYCON.INP DAYCON.OUT 63124356 14 63156243 13 Bài (4 điểm) HOÁN VỊ Cho X là hoán vị N số nguyên dương đầu tiên (3 <= N <= 5) Các hoán vị xếp theo thứ tự từ nhỏ đến lớn Yêu cầu: Tìm vị trí X dãy các hoán vị đó Dữ liệu: Đọc từ tệp HOANVI.INP, gồm nhiều phương án, phương án trên dòng, trên dòng đó ghi số nguyên dương N và hoán vị X Kết quả: Ghi màn hình và ghi tệp HOANVI.OUT, phương án ghi trên dòng, trên dòng đó ghi vị trí tìm X (2) Ví dụ: HOANVI.INP 213 312 HOANVI.OUT Bài (5.5 điểm) SỐ NGUYÊN TỐ Cho số nguyên dương N Yêu cầu: Tìm số nguyên tố nhỏ lớn N Dữ liệu: Đọc từ file văn SONT.INP, gồm nhiều phương án, phương án trên dòng, trên dòng đó ghi số nguyên dương N (0 < N <= 109) Kết quả: Ghi màn hình và ghi file văn SNTP.OUT, phương án trên dòng, trên dòng đó ghi số nguyên tố tìm Ví dụ: SONT.INP SONT.OUT (3) DỮ LIỆU ĐỂ KIỂM TRA (TEST) {Tệp BACS.INP} 123 371 153 370 379 407 789 {Tệp DAYCON.INP} 63124356 63156243 8471824356 10 10 12 5 10 15 3 10 20 13 3 10 26 6 4 10 {Tệp HOANVI.INP} 213 312 2143 3214 32145 32514 {Tệp SONT.INP} 135 1098 14130 175473 1111111 12121212 1567891234 (4) KẾT QUẢ ĐỂ KIỂM TRA (TEST) {Tệp BACS.OUT} [123 != 1^3 + 2^3 + 3^3] [371 = 3^3 + 7^3 + 1^3] [153 = 1^3 + 5^3 + 3^3] [370 = 3^3 + 7^3 + 0^3] [379 != 3^3 + 7^3 + 9^3] [407 = 4^3 + 0^3 + 7^3] [789 != 7^3 + 8^3 + 9^3] {Tệp DAYCON.OUT} 14 13 18 37 30 15 43 14 66 20 26 43 {Tệp HOANVI.OUT} 15 55 59 {Tệp SONT.OUT} 137 1103 14143 175481 1111151 12121231 1567891253 (5) Mã nguồn để tham khảo – tệp BACS.PAS uses crt; Const tentep='BACS'; Var a, b, c, tl:integer; abc: integer; xau3: string; sopa, pa: byte; f:text; procedure DocSoPA; BEGIN assign(f,tentep+'.INP'); reset(f); sopa:=0; while (not eof(f)) begin inc(sopa); readln(f); end; close(f); END; procedure DocPA; var i:byte; BEGIN assign(f,tentep+'.INP'); reset(f); i:=1; while (i<pa) begin inc(i); readln(f); end; readln(f,a,b,c); close(f); END; procedure TimTL; var mu3: integer; BEGIN abc:= 100*a + 10*b + c; mu3 := a*a*a + b*b*b + c*c*c; if abc = mu3 then tl := else tl := 0; END; procedure WriteMu3; BEGIN writeln(a,'^3 + ',b,'^3 + ',c,'^3]'); writeln(f,a,'^3 + ',b,'^3 + ',c,'^3]'); END; procedure GhiKQ; BEGIN assign(f,tentep+'.OUT'); if pa=1 then rewrite(f) else append(f); write(tl,' [',abc); write(f,tl,' [',abc); if tl = then begin write(' = '); write(f,' = '); end else begin write(' != '); write(f,' != '); end; WriteMu3; close(f); END; BEGIN clrscr; DocSoPA; for pa:=1 to sopa begin DocPA; TimTL; GhiKQ; end; writeln; write('Da xong Nhan ENTER de thoat.'); (6) readln; END Mã nguồn để tham khảo – tệp DAYCON.PAS uses crt; const tentep = 'DAYCON'; nmax = 3000; var N, M: longint; {dau vao} a: array[1 nmax] of longint; {dau vao} vtd, vtc, tmax: longint; {dau ra} soPA, pa: byte; f: text; procedure DocSoPA; BEGIN assign(f, tentep+'.INP'); reset(f); while not EOF(f) begin readln(f); inc(soPA); end; close(f); END; procedure DocPA; var i: integer; BEGIN assign(f, tentep+'.INP'); reset(f); i:=1; while i<pa begin readln(f); inc(i); end; read(f,N, M); for i:= to N read(f,a[i]); close(f); END; Procedure LoiGiai; var i,jc,j,t: longint; BEGIN tmax := 0; for i:= to N begin jc := i + M -1; t := 0; for j := i to jc t := t + a[j]; if tmax < t then begin tmax := t; vtd := i; vtc := jc; end; end; END; procedure GhiKQ; BEGIN writeln(vtd,' ', vtc,' ',tmax); assign(f, tentep+'.OUT'); if pa<=1 then rewrite(f) else append(f); writeln(f,vtd,' ', vtc,' ',tmax); close(f); END; BEGIN clrscr; docSoPA; for pa:=1 to soPA begin docPA; LoiGiai; GhiKQ; (7) end; writeln; write('Nhan ENTER de ket thuc.'); readln; END Mã nguồn để tham khảo – tệp HOANVI.PAS uses crt; const tentep = 'HOANVI'; nmax = 5; type hoanvi = array[1 nmax] of integer; var N, sox: integer; X: hoanvi; vt: integer; soPA, pa: byte; (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) x[i] := sox mod 10; sox := sox div 10; end; END; {doi cho b[i] vaf b[k]} procedure DoiCho(var a: hoanvi; j, k: integer); var t: integer; BEGIN t := a[j]; a[j] := a[k]; a[k] := t; END; {sinh hoan vi tiep sau hoan vi a} procedure SinhHV(var a: hoanvi); var j,k: integer; BEGIN j := N - 1; while a[j] > a[j+1] dec(j); k := N; while a[j] > a[k] dec(k); DoiCho(a,j,k); inc(j); k := N; while k > j begin DoiCho(a,j,k); inc(j); dec(k); end; END; {tra ve true neu va chi neu hai hoan vi hv1 va hv2 bang nhau} function BangNhau(hv1,hv2: hoanvi): boolean; var i: integer; kq:boolean; BEGIN kq := true; for i:= to N if hv1[i] <> hv2[i] then begin (19) kq := false; break; end; BangNhau := kq; END; {Tim vi tri cua hoan vi X day cac hoan vi cua N so tu nhien dau tien} procedure TimVT; var i : integer; hv: hoanvi; BEGIN for i := to N hv[i] := i; {phan tu dau tien cua day cac hoan vi} vt := 1; while not BangNhau(hv,X) begin inc(vt); SinhHV(hv); end; END; procedure GhiKQ; BEGIN writeln(vt); assign(f, tentep+'.OUT'); if pa<=1 then rewrite(f) else append(f); writeln(f,vt); close(f); END; BEGIN clrscr; docSoPA; for pa:=1 to soPA begin docPA; timVT; GhiKQ; end; writeln; write('Da xong Nhan ENTER de thoat.'); readln; END (20) Mã nguồn để tham khảo – tệp SONT.PAS uses crt; (21) (22) (23) (24) (25) if so > then begin usc := trunc(sqrt(so)); us := 3; while (us <= usc) begin if (so mod us <> 0) then inc(us,2) else begin kq := false; break; end; end; end; end; end; laSNT := kq; END; procedure TimSNT; BEGIN if N <= then SNT := else if N = then SNT := else begin SNT := N + 1; while not LaSNT(SNT) if SNT mod = then inc(SNT) else inc(SNT,2); end; END; procedure GhiKQ; BEGIN writeln(SNT); assign(f, tentep+'.OUT'); if pa<=1 then rewrite(f) else append(f); writeln(f,SNT); close(f); END; BEGIN clrscr; docSoPA; for pa:=1 to soPA begin docPA; timSNT; GhiKQ; end; writeln; write('Da xong Nhan ENTER de thoat.'); readln; (26) END (27)