Tải bản đầy đủ (.docx) (26 trang)

De tong hop 0203 Tu de thi Kien Giang 2014

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (130.69 KB, 26 trang )

<span class='text_page_counter'>(1)</span>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 1 2 3 4. Tên bài Ba chữ số Dãy con Hoán vị Số nguyên tố. Tệp chương trình BACS.PAS DAYCON.PAS HOANVI.PAS SONT.PAS. Tệp dữ liệu. Tệp kết quả. 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 1. (5 điểm) BA CHỮ SỐ Với ba chữ số a, b, c (0 < a <= 9, 0 <= b, c <= 9), người ta tạo số ra số abc bằng cách viết liên tiếp ba chữ số a, b, c đó liền nhau. 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 trong tệp BACS.INP, gồm nhiều phương án, mỗi phương án trên một dòng, trên dòng đó ghi 3 chữ số a, b, c. Kết quả: Đưa ra màn hình và ghi ra tệp BACS.OUT, mỗi phương án ghi trên một dòng, trên dòng đó ghi số TL với giá trị là 0 nếu hệ thức nêu trên là sai, là 1 nếu hệ thức trên là đúng. Tiếp sau đó, nếu TL = 1 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 để trong cặp ngoặc vuông (xem ví dụ).. Ví dụ:. BACS.INP 123 371. BACS.OUT 0 [123 != 1^3 + 2^3 + 3^3] 1 [371 = 3^3 + 7^3 + 1^3]. Bài 2 (5,5 điểm) DÃY CON Cho dãy A gồm N số nguyên. Dãy con B gồm M phần tử liên tiếp nhau của dãy A (M <= N). Yêu cầu: Tìm dãy con B có tổng các phần tử là lớn nhất. Dữ liệu: Đọc từ tệp DAYCON.INP, gồm nhiều phương án, mỗi phương án trên một dòng, trên dòng đó ghi 2 số nguyên dương N và M, tiếp đó là N phần tử của dãy A. Kết quả: Ghi ra màn hình và ghi ra tệp DAYCON.OUT, mỗi phương án ghi trên 1 dòng, trên dòng đó ghi vị trí vị trí đầu, vị trí cuối và tổng các phần tử của mảng B tìm được (vị trí được tính theo mảng A). Ví dụ: DAYCON.INP DAYCON.OUT 63124356 4 6 14 63156243 2 4 13 Bài 3 (4 điểm) HOÁN VỊ Cho X là một hoán vị của N số nguyên dương đầu tiên (3 <= N <= 5). Các hoán vị được sắp xếp theo thứ tự từ nhỏ đến lớn. Yêu cầu: Tìm vị trí của X trong dãy các hoán vị đó. Dữ liệu: Đọc từ tệp HOANVI.INP, gồm nhiều phương án, mỗi phương án trên một dòng, trên dòng đó ghi số nguyên dương N và hoán vị X. Kết quả: Ghi ra màn hình và ghi ra tệp HOANVI.OUT, mỗi phương án ghi trên 1 dòng, trên dòng đó ghi vị trí tìm được của X..

<span class='text_page_counter'>(2)</span> Ví dụ: HOANVI.INP 3 213 3 312. HOANVI.OUT 3 5. Bài 4. (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ỏ nhất nhưng lớn hơn N. 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 <= 109). Kết quả: Ghi ra màn hình và ghi ra file văn bản SNTP.OUT, mỗi phương án trên 1 dòng, trên dòng đó ghi số nguyên tố tìm được. Ví dụ: SONT.INP 1 2. SONT.OUT 2 3.

<span class='text_page_counter'>(3)</span> 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 6 10 1 8 5 6 7 2 9 4 3 12 5 1 2 4 3 5 6 10 1 8 5 6 7 15 7 1 5 6 2 4 3 3 5 6 10 1 8 5 6 7 20 13 5 6 2 4 3 3 5 6 10 1 8 5 6 7 1 2 4 3 5 6 26 7 1 8 2 4 3 5 6 3 1 5 6 2 4 3 1 2 4 3 5 6 10 1 8 5 6 7 {Tệp HOANVI.INP} 3 213 3 312 4 2143 4 3214 5 32145 5 32514 {Tệp SONT.INP} 1 2 135 1098 14130 175473 1111111 12121212 1567891234.

<span class='text_page_counter'>(4)</span> KẾT QUẢ ĐỂ KIỂM TRA (TEST) {Tệp BACS.OUT} 0 [123 != 1^3 + 2^3 + 3^3] 1 [371 = 3^3 + 7^3 + 1^3] 1 [153 = 1^3 + 5^3 + 3^3] 1 [370 = 3^3 + 7^3 + 0^3] 0 [379 != 3^3 + 7^3 + 9^3] 1 [407 = 4^3 + 0^3 + 7^3] 0 [789 != 7^3 + 8^3 + 9^3] {Tệp DAYCON.OUT} 4 6 14 2 4 13 1 4 18 1 6 37 5 9 30 9 15 43 2 14 66 20 26 43 {Tệp HOANVI.OUT} 3 5 8 15 55 59 {Tệp SONT.OUT} 2 3 137 1103 14143 175481 1111151 12121231 1567891253.

<span class='text_page_counter'>(5)</span> 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)) do 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) do 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 := 1 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 = 1 then begin write(' = '); write(f,' = '); end else begin write(' != '); write(f,' != '); end; WriteMu3; close(f); END; BEGIN clrscr; DocSoPA; for pa:=1 to sopa do begin DocPA; TimTL; GhiKQ; end; writeln; write('Da xong. Nhan ENTER de thoat.');.

<span class='text_page_counter'>(6)</span> 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) do 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 do begin readln(f); inc(i); end; read(f,N, M); for i:= 1 to N do read(f,a[i]);. close(f); END; Procedure LoiGiai; var i,jc,j,t: longint; BEGIN tmax := 0; for i:= 1 to N do begin jc := i + M -1; t := 0; for j := i to jc do 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 do begin docPA; LoiGiai; GhiKQ;.

<span class='text_page_counter'>(7)</span> 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;.

<span class='text_page_counter'>(8)</span>

<span class='text_page_counter'>(9)</span>

<span class='text_page_counter'>(10)</span>

<span class='text_page_counter'>(11)</span>

<span class='text_page_counter'>(12)</span>

<span class='text_page_counter'>(13)</span>

<span class='text_page_counter'>(14)</span>

<span class='text_page_counter'>(15)</span>

<span class='text_page_counter'>(16)</span>

<span class='text_page_counter'>(17)</span>

<span class='text_page_counter'>(18)</span> 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] do dec(j); k := N; while a[j] > a[k] do dec(k); DoiCho(a,j,k); inc(j); k := N; while k > j do 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:= 1 to N do if hv1[i] <> hv2[i] then begin.

<span class='text_page_counter'>(19)</span> kq := false; break; end; BangNhau := kq; END; {Tim vi tri cua hoan vi X trong day cac hoan vi cua N so tu nhien dau tien} procedure TimVT; var i : integer; hv: hoanvi; BEGIN for i := 1 to N do hv[i] := i; {phan tu dau tien cua day cac hoan vi} vt := 1; while not BangNhau(hv,X) do 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 do begin docPA; timVT; GhiKQ; end; writeln; write('Da xong. Nhan ENTER de thoat.'); readln; END..

<span class='text_page_counter'>(20)</span> Mã nguồn để tham khảo – tệp SONT.PAS uses crt;.

<span class='text_page_counter'>(21)</span>

<span class='text_page_counter'>(22)</span>

<span class='text_page_counter'>(23)</span>

<span class='text_page_counter'>(24)</span>

<span class='text_page_counter'>(25)</span> if so > 9 then begin usc := trunc(sqrt(so)); us := 3; while (us <= usc) do 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 <= 1 then SNT := 2 else if N = 2 then SNT := 3 else begin SNT := N + 1; while not LaSNT(SNT) do if SNT mod 2 = 0 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 do begin docPA; timSNT; GhiKQ; end; writeln; write('Da xong. Nhan ENTER de thoat.'); readln;.

<span class='text_page_counter'>(26)</span> END..

<span class='text_page_counter'>(27)</span>

×