Tải bản đầy đủ (.doc) (25 trang)

BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNH

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 (1.02 MB, 25 trang )

BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
ĐỀ THI CHỌN HỌC SINH GIỎI THÀNH PHỐ
[*****]
LỚP 9 - Năm học 2015- 2016
MÔN: Tin học
Thời gian làm bài: 150 phút
( Đề thi gồm 3câu, 2 trang)
TỔNG QUAN VỀ ĐỀ THI
STT
Bài 1
Bài 2
Bài 3

File chương trình
nguồn nộp
BAI1.PAS
BAI2.PAS
BAI3.PAS

File dữ liệu
vào
BAI1.INP
BAI2.INP
BAI3.INP

File dữ liệu ra

Biểu điểm

BAI1.OUT
BAI2.OUT


BAI3.OUT

3.0điểm
3.5điểm
3.5điểm

Chú ý:
- Bài thi được làm trên máy vi tính
- Học sinh đặt tên File chương trình theo đúng quy định của từng bài, không ghi
bất kì thông tin cá nhân nào vào file bài làm( họ tên, SBD, ngày sinh, trường , các
kí hiệu khác…)
- Trong qua trình làm bài thường xuyên lưu bài tránh sự cố mất điện đột ngột, có
thể mất bài.
- File input và output ở trong thư mục hiện hành, thí sinh không phải khai báo
đường dẫn đến file input và output
Bài 1:(3.0điểm) Xâu con
Cho trước hai sâu kí tự S1 và S2. Viết chương trình tính số lần lặp lại của xâu 1
trong xâu 2
Dữ liệu: Vào từ tệp văn bản BAI1.INP gồm:
. Dòng đầu tiên chứa xâu S1
. Dòng thứ hai chứa xâu S2
Kết quả: Ghi ra tệp văn bản BAI1.OUT:
. Chỉ một dòng duy nhất ghi số lần lặp lại của xâu 1 trong xâu 2.
Ví dụ:
XAU.INP
aba
bababababa

XAU.OUT
4


Trang 1


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
Bài 2: (3.5điểm): Số nguyên tố
Tạo một dãy số nguyên gồm n (31 đến 99 xuất dãy và xuất ra vị trí các số nguyên tố của dãy.
+ Dữ liệu vào: Số nguyên n số nguyên nhận các giái trị ngẫu nhiên từ 1 đến 99
+ Kết quả ra: Mảng a ngẫu nhiên và vị trí các số nguyên tố trong mảng.
Ví duï:
Dữ liệu vào BAI1.INT
20

Dữ liệu ra. BAI2.OUT
74 98 69 94 5 11 11 50 21 61 89 73 14 19 55 31 71 50 1
12
5 6 7 10 11 12 14 16 17

Bài 3: (3.5điểm): Đẳng thức
Cho một đẳng thức sai có dạng A=S (với A, S là hai số nguyên không âm). Viết
chương trình tìm cách thêm vào giữa các chữ số của số nguyên A một số phép
cộng để nhận được một đẳng thức đúng, sao cho số phép cộng thêm vào là ít nhất
có thể được.
Dữ liệu vào: chứa trong tệp văn bản EQ.INP gồm một dòng là đẳng thức sai A =
S.
Dữ liệu ra: ghi vào tệp văn bản EQ.OUT gồm một dòng chứa đẳng thức đúng sau
khi đã thêm vào các phép cộng.
Ví dụ:
BAI3.INP

BAI3.INP
143175=120
5025=30
BAI3.OUT
BAI3.OUT
14+31+75=120
5+025=30

Trang 2


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN

ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI THÀNH
PHỐ
LỚP 9 - Năm học 20152016
MÔN: Tin học
Thời gian làm bài: 150 phút
( Đề thi gồm 3câu, 3 trang)

[*****]

HƯỚNG DẪN CHẤM
TEST
Bài 1

DỮ LIỆU
VÀO
abc
habcdabc

20

DỮ LIỆU RA
2

ĐIỂM

1.0điểm
2.0điểm
Bài 2
74 98 69 94 5 11 11 50 21 61 89 73 1.5điểm
14 19 55 31 71 50 1 12
5 6 7 10 11 12 14 16 17
1.5điểm
Bài 3 6025
6+025=31
1.5điểm
153179
15+31+79=125
2.0điểm
Bài 1: Bài xử lý xâu lặp
Thuật toán: Đếm số lần lặp của xâu S1 trong xâu S2.
+ Duyệt từ vị trí thứ 1 đến length(S2), nếu xâu S1 trùng với một phần của S2 thì
tăng biến i(i là biến đếm lần xuất hiện của xâu S1 trong S2)
Code mẫu:
Uses crt;
Var
f:text; S1,S2:string;
I,j:integer;
Begin

Clrscr;
Trang 3


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
Assign(f,’BAI1.INP’);
Reset(f);
Readln(f,S1); Readln(f,S2);
Close(f);
I:=0;
While Pos(S1,S2)<>0 Do
Begin
Inc(i);
J:=Pos(S1,S2);
Delete(S2,1,j);
End;
Assign(f,’BAI1.OUT’);
Rewrite(f);
Write(f,j);
Close(f);
Readln;
End.
Bài 2: Mảng số nguyên tố
Thuật toán:
+ Duyệt từ phần tử đầu tiên 1 đến phần tử cuối cùng 99, nếu là số nguyên tố thì
gán vào mảng a và in ra vị trí của chúng.
Code mẫu:
uses crt;
var a:array[1..100] of longint;
i,j,n:integer;

ktra:boolean;
begin
repeat
clrscr;
write('So phan tu cua mang:');
readln(n);
until (1randomize;
for i:=1 to n do a[i]:=random(99)+1;
writeln('Mang a la:');
for i:=1 to n do write(a[i]:3);
writeln;
Trang 4


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
write('Vi tri cac so nguyen to co trong a la:');
for i:=1 to n do
begin
ktra:=true;
for j:=2 to trunc(sqrt(a[i])) do
if (a[i] mod j = 0) then begin ktra:=false;break;end;
if ktra and (a[i]>1) then write(i:3);
end;
readln;
end.
Bài 3: ĐẲNG THỨC
Thuật toán:
+ Nhập số nguyên a bất kì, duyệt các phần tử của số nguyên a và tìm cách thêm
vào giữa số nguyên a một dấu (+) sao cho được phép tính đúng.

Code mẫu:
PROGRAM Dang_Thuc;
CONST fi=’EQ.INP’; fo=’EQ.OUT’;
inf = 1000000000;
VAR n, S : longint;
i, j : longint;
ch : char;
KQ: String;
A : array[1..1000] of longint;
B : array[1..1000] of longint;
memo : array[1..1000,0..5000] of longint;
PROCEDURE KhoiTao;
Var f: text;
Begin
Assign(f, fi);
Reset(f);
n:=0;
Read(f, ch);
Repeat
Inc(n);
A[n]:= Ord(ch) – 48;
Read(f, ch);
Trang 5


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
Until ch=’=’;
Readln(f, S);
Close(f);
B[n] := n;

For i := n-1 downto 1 do
if A[i] = 0 then B[i] := B[i+1] else B[i] := i;
For i := 1 to n do
For j := 0 to S do
memo[i,j] := -1;
KQ:=’’;
End;
PROCEDURE GhiFile;
Var f: text;
Begin
Assign(f, fo);
Rewrite(f);
Write(f, KQ);
Close(f);
End;
FUNCTION Opt( i, sum : longint ) : longint;
Var j, broj : longint;
Begin
if i > n then begin
if sum = 0 then opt := 0 else opt := inf;
end
else begin
if memo[i,sum] = -1 then begin
memo[i,sum] := inf;
broj := 0;
for j := B[i] to n do begin
broj := broj * 10 + A[j];
if broj > sum then break;
if 1 + opt( j+1, sum-broj ) < memo[i,sum] then
memo[i,sum] := 1 + opt( j+1, sum-broj );

end;
end;
Opt := memo[i,sum];
Trang 6


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
end;
End;
PROCEDURE Xuly( i, sum : longint );
Var f: text; j, broj : longint;
Begin
if i > n then begin
KQ:=KQ + '=’+ Str(S );
end
else begin
if i > 1 then KQ:=KQ + '+';
broj := 0;
for j := i to n do begin
KQ:=KQ + Chr(A[j]+48 );
broj := broj * 10 + A[j];
if opt( i, sum ) = 1 + opt( j+1, sum-broj ) then begin
Xuly( j+1, sum-broj );
break;
end;
end;
end;
End;
BEGIN
KhoiTao;

Xuly(1, S );
GhiFile;
END.

ĐỀ THI CHỌN HỌC SINH GIỎI THÀNH PHỐ
LỚP 9 - Năm học 2015-2016
MÔN: TIN HỌC
Thời gian làm bài: 150 phút
( Đề thi gồm 3 câu, 2 trang)
TỔNG QUAN VỀ ĐỀ THI

[*****]

File chương
STT

trình nguồn
nộp

File dữ liệu
vào
Trang 7

File kết quả ra

Biểu
điểm


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN

Bài 1
BAI1.PAS
BAI1.INP
BAI1.OUT
3,0 điểm
Bài 2
BAI2.PAS
BAI2.INP
BAI2.OUT
3,5 điểm
Bài 3
BAI3.PAS
BAI3.INP
BAI3.OUT
3,5 điểm
Chú ý:
- Bài thi được làm trên máy vi tính.
- Học sinh đặt tên file chương trình theo đúng quy định của từng bài, không ghi
bất kỳ thông tin cá nhân nào vào file bài làm (họ tên, số báo danh, ngày sinh,
trường, các ký hiệu khác thường,…)
- Trong quá trình làm, thường xuyên lưu bài vào đĩa cứng tránh sự cố mất điện đột
ngột, có thể mất bài.
- File input và output ở trong thư mục hiện hành, thí sinh không phải khai báo
đường dẫn đến file input và output.
Bài 1 (3,0 điểm). Tính tổng các số có trong xâu kí tự.
- Dữ liêu vào : từ file “Bai1.inp” gồm 1 dòng ghi một xâu kí tự.
- Dữ liệu ra: đưa ra file “Bai2.out” gồm một dòng ghi tổng các số xuất hiện trong
xâu.
Ví dụ:
BAI1.INP

BAI1.OUT
Ngay12thang8nam83
103
Bài 2. (3,5 điểm) Dãy số hạnh phúc
Dãy số tự nhiên a1, a2, a3, …, ak gọi là dãy số hạnh phúc nếu thỏa mãn các
điều kiện sau:
- Dãy số trên là giảm dần
- Với mọi i (1các số a1, a2, a3, …, ai-1;
Yêu cầu: cho số tự nhiên N. Tìm dãy số hạnh phúc dài nhất bắt đầu từ N
- Dữ liêu vào : từ file “Bai2.inp” gồm 1 dòng ghi số tự nhiên N.
- Dữ liệu ra: đưa ra file “Bai2.out” gồm một dòng ghi dãy số hạnh phúc dài nhất
tìm được.
Ví dụ:
BAI2.INP
BAI2.OUT
10
10 7 5 3 2 1
Bài 3. (3,5 điểm) Dãy con đối xứng dài nhất
Một dãy số gọi là đối xứng nếu các phần tử của nó đọc từ trái qua phải và từ
phải qua trái là như nhau. Ví dụ: 1, 9, 6, 7, 6, 9, 1 hoặc 12, 67,67,12 là các dãy số
đối xứng.
Yêu cầu: Cho một dãy số nguyên A có n phần tử. Tìm dãy con đối xứng dài
nhất trong dãy A, biết rằng dãy con là một dãy gồm nhiều phần tử liên tiếp trong
dãy A (nếu có nhiều dãy con có độ dài bằng nhau thì đưa ra dãy có tổng các phần
Trang 8


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
tử là nhỏ nhất). VD: cho dãy A: 12, 6, 45, 9, 7, 9, 45, 6, 6, 45, 34. Dãy con đối

xứng dài nhất là 6, 45, 9, 7, 9, 45, 6
- Dữ liêu vào : từ file “Bai3.inp” gồm 2 dòng
+ Dòng 1 ghi số tự nhiên n.
+ Dòng 2 ghi n số tự nhiên (Mỗi số cách nhau ít nhất một dấu cách)
- Dữ liệu ra: đưa ra file “Bai3.out” gồm 2 dòng
+ Dòng 1 ghi số phần tử của dãy con đối xứng dài nhất tìm được
+ Dòng 2 ghi các phần tử của dãy con tìm được
Ví dụ:
BAI3.INP
BAI3.OUT
11
7
12 6 45 9 7 9 45 6 6 45 34
6 45 9 7 9 45 6
------------Hết----------

Trang 9


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN

[*****]

ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI
THÀNH PHỐ
Lớp 9 - Năm học 2015 - 2016
MÔN: TIN HỌC
(Hướng dẫn chấm gồm 3 trang)

I. Code mẫu

Bài 1.
var st:string[200];
i,so,tong:integer;
f:text;
begin
assign(f,'bai1.inp'); reset(f); readln(f,st); close(f);
so:=0;
tong:=0;
for i:=1 to length(st) do
begin
if (st[i]<'0') or (st[i]>'9') then so:=0;
if (st[i]>='0') and (st[i]<='9') then
case st[i] of
'0': so:=so*10+0;
'1': so:=so*10+1;
'2': so:=so*10+2;
'3': so:=so*10+3;
'4': so:=so*10+4;
'5': so:=so*10+5;
'6': so:=so*10+6;
'7': so:=so*10+7;
'8': so:=so*10+8;
'9': so:=so*10+9;
end;
if (st[i+1]<'0') or (st[i+1]>'9') then tong:=tong + so;
end;
assign(f,'bai1.out'); rewrite(f); writeln(f,tong); close(f);
end.
Bài 2:
var n,i:integer;

f:text;
function snt(x:integer):boolean;
var i,dem:integer;
begin
dem:=0;
for i:=1 to x do if x mod i =0 then dem:=dem+1;
Trang 10


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
if dem=2 then snt:=true else snt:=false;
end;
Begin
assign(f,'bai2.inp');reset(f);
readln(f,n); close(f);
assign(f,'bai2.out'); rewrite(f);
for i:=n downto 1 do if snt(i) or (n mod i=0) then write(f,i:4);
close(f);
End.
Bài 3
type mang=array[1..100] of integer;
var a:mang; n,i,k:integer;
kq:boolean;
f:text;
ton,max:integer;
vt,dai:integer;
function doixung(x:mang; h,k:integer):boolean;
var i:integer;
kt:boolean;
begin

kt:=true;
for i:=1 to k-h+1 do if x[h+i-1]<>x[k-i+1] then kt:=false;
doixung:=kt;
end;
function tong(x:mang; h,k:integer):integer;
var
i, t:integer;
begin
t:=0;
for i:=h to k do t:=t + x[i];
tong:=t;
end;
procedure inmh(x:mang;h,k:integer);
var i:integer;
begin
for i:=h to k do write(f,x[i]:4);
writeln(f);
end;
begin
assign(f,'bai3.inp');
Trang 11


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
reset(f);
readln(f,n);
for i:=1 to n do read(f,a[i]);
close(f);
assign(f,'bai3.out');
rewrite(f);

max:=0; dai:=0;
for k:=n downto 2 do
begin
for i:=1 to n-k+1 do
if doixung(a,i,i+k-1) and (max<tong(a,i,i+k-1)) and (k>=dai) then
begin
vt:=i; dai:=k;
end;
end;
inmh(a,vt,vt+dai-1);
close(F);
end.
II. Bộ test
Bài
Bài 1
(3,0
điểm)

Bài 2
(3,5

Dữ liêu vào
1 cong 2 bang 3
Ngay25thang1nam2016
12abc34def56gh
Thu2ngay01thang02nam2016
1234 567
10
48
17

49

Bài 3
(3,5
điểm)

Dữ liêu ra
6
2042
102
2021
1801
10, 7, 5, 3, 2, 1
48, 47, 43, 41, 37, 31, 29, 24,
23, 19, 17, 16, 13, 12, 11, 8,
7, 6, 5, 4, 3, 2, 1
17, 13, 11, 7, 5, 3, 2, 1
49, 47,43, 41, 37, 31, 29, 23,
19, 17, 13, 11, 7, 5, 3, 2, 1
7
6 45 9 7 9 45 6

11
12 6 45 9 7 9 45 6 6 45
34
8
6
12332123
123321
6

6
122221
122221
11
5
4 3 5 9 7 9 5 1 5 9 10
95159
Trang 12

Điểm
0,6
0,6
0,6
0,6
0,6
1,75

1,75
1,75

1,75


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
Tổng
10 đ
ĐỀ THI CHỌN HỌC SINH GIỎI THÀNH PHỐ
LỚP 9 - NĂM HỌC: 2015- 2016
MÔN: TIN HỌC
Thời gian làm bài: 150 phút

(Đề thi gồm 3 câu, 2 trang)

[*****]

TỔNG QUAN VỀ ĐỀ THI
File chương
STT

trình nguồn

Bài 1
Bài 2
Bài 3

nộp
BAI1.PAS
BAI2.PAS
BAI3.PAS

File dữ liệu
vào
BAI1.INP
BAI2.INP
BAI3.INP

File kết quả ra
BAI1.OUT
BAI2.OUT
BAI3.OUT


Biểu
điểm
3,0 điểm
3,5 điểm
3,5 điểm

Chú ý:
- Bài thi được làm trên máy vi tính.
- Học sinh đặt tên file chương trình theo đúng quy định của từng bài, không ghi
bất kỳ thông tin cá nhân nào vào file bài làm (họ tên, số báo danh, ngày sinh,
trường, các ký hiệu khác thường,…)
- Trong quá trình làm, thường xuyên lưu bài vào đĩa cứng tránh sự cố mất điện đột
ngột, có thể mất bài.
- File input và output ở trong thư mục hiện hành, thí sinh không phải khai báo
đường dẫn đến file input và output.

Bài 1 (3.0 điểm): Viết chương trình xóa các ký tự chữ số trong một xâu ký tự được
nhập vào từ bàn phím.
Dữ liệu vào: Cho trong tệp BAI1.INP
- Chứa một xâu ký tự có cả kí tự chữ số, độ dài xâu ký tự không vượt quá 100
ký tự.
Kết quả: Ghi ra tệp BAI1.OUT
- Ghi xâu ký tự sau khi đã xóa các ký tự chữ số của xâu ký tự ở trong file
input
Trang 13


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
Ví dụ:
BAI1.INP

BAI1.OUT
ab12cd
abcd
Bài 2 (3.5 điểm): Viết chương trình nhập vào 2 mảng số nguyên A, B đại diện cho
2 tập hợp (không thể có 2 phần tử trùng nhau trong một tập hợp). Trong quá trình
nhập, phải kiểm tra: nếu phần tử vừa nhập vào đã có trong mảng thì không bổ sung
vào mảng. In ra màn hình các phần tử là giao của 2 tập hợp A, B.
Dữ liệu vào: Cho trong tệp BAI2.INP:
- Dòng 1: chứa giá trị N (số lượng phần tử của dãy A)
- Dòng 2: chứa N số nguyên dương là các giá trị của dãy A

- Dòng 3: chứa giá trị M (số lượng phần tử của dãy B)
- Dòng 4: chứa M số nguyên dương là các giá trị của dãy B

Kết quả: Ghi ra tệp BAI3.OUT: Ghi các giá trị là giao của A và B tìm được.
Ví dụ:
BAI2.INP

BAI2.OUT

5
24687
4
1498

48

Bài 3 (3,5 điểm): Cho một mảng số nguyên gồm n phần tử. Tìm dãy con gồm m
phần tử (m≤n) sao cho dãy con này có tổng lớn nhất. (Dãy con là dãy các phần tử
liên tiếp nhau trong mảng).

Dữ liệu vào: Cho trong tệp BAI3.INP:
- Dòng 1: chứa giá trị N (số lượng phần tử của dãy A)
- Dòng 2: chứa N số nguyên dương là các giá trị của dãy A

- Dòng 3: chứa giá trị M (m≤n)

Trang 14


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
Kết quả: Ghi ra tệp BAI3.OUT: Ghi chứa M số nguyên dương là các giá trị của
dãy B

tìm được.

Ví dụ:
BAI3.INP
7
2467391
5

BAI3.OUT
46739

....................Hết....................

[*****]

ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI THÀNH
PHỐ

LỚP 9 - NĂM HỌC: 2015- 2016
MÔN: TIN HỌC
(Hướng dẫn chấm gồm 03 trang)

Bài 1 (3 điểm)
Thuật toán:
Duyệt qua tất cả các phần tử của sâu St. Nếu kí tự St[i]∈St là kí tự số thì xóa
kí tự đó đi và viết St ra màn hình.
Code mẫu
Uses Crt;
Var St:String;
{Hàm POSNUM kiểm tra xem trong xâu St có ký tự chữ số hay không? Nếu có,
hàm trả về vị trí đầu tiên của ký tự chữ số, ngược lại hàm trả về giá trị 0}
Function POSNUM(St:String):Byte;
Var OK:Boolean;
i:Byte;
Begin
OK:=False;
i:=1;
While (i<=Length(St)) AND (Not OK) Do
Trang 15


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
If St[i] IN [‘0’..’9’] Then OK:=True
Else i:=i+1;
If OK Then POSNUM:=i Else POSNUM:=0;
End;
Begin
Write(‘Nhap xau St: ‘); Readln(St);

While POSNUM(St)<>0 Do Delete(St,POSNUM(St),1);
Write(‘Xau sau khi xoa: ‘,St);
Readln;
End.
Bài 2 (3,5 điểm)
Thuật toán:
Duyệt qua tất cả các phần tử ai∈A. Nếu ai∈B thì viết ai ra màn hình.
Code mẫu
Uses Crt;
Type Mang=ARRAY[1..50] Of Integer;
Var A,B:Mang;
n,m:Byte;
Function KiemTra(x:Integer; n:Byte; A:Mang):Boolean;
Var i:Byte; Found:Boolean;
Begin
Found:=False;
i:=1;
While (i<=n) AND (not Found) Do
If x=A[i] Then Found:=True Else i:=i+1;
KiemTra:=Found;
End;
Procedure NhapMang(Var n:Byte; Var A:Mang);
Var ch:Char;
x:Integer;
Begin
n:=0;
Repeat
Write('x='); Readln(x);
If not KiemTra(x,n,A) Then
Begin

n:=n+1; A[n]:=x;
End;
Writeln('An ESC de ket thuc nhap!');
ch:=Readkey;
Until ch=#27;
End;
Trang 16


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
Procedure GiaoAB(n:Byte; A:Mang;m:Byte; B:Mang);
Var i:Byte;
Begin
For i:=1 To n Do
If KiemTra(A[i],m,B) Then Write(A[i]:4);
End;
Begin
Clrscr;
Writeln('Nhap mang A: ');
NhapMang(n,A);
Writeln('Nhap mang B: ');
NhapMang(m,B);
Writeln('Giao cua 2 mang A&B la: ');
GiaoAB(n,A,m,B);
Readln;
End.
Bài 3 (3,5 điểm)
Thuật toán:
- Nhập số phần tử n của mảng A, Nhập số phần tử của mảng con m
- Giả sử k=1 là vị trí phần tử đầu tiên của dãy, m phần tử đầu tiên của mảng A là

dãy con có tổng lớn nhất, tìm dãy con khác, tính tổng của dãy con thứ i.
- Duyệt qua tất cả các phần tử ai∈A; Nếu dãy con tìm được có tổng lớn hơn dãy
con trước, thay tổng mới, thay vị trí đầu tiên trong dãy. Hiển thị dãy con có tổng
lớn nhất cần tìm
Code mẫu
Uses Crt;
Type Mang=ARRAY[1..50] Of Integer;
Var A:Mang;
n,m,i,j,k:Byte;
S,Max:Integer;
Begin
Write('So phan tu cua mang: n= '); Readln(n);
For i:=1 To n Do
Begin
Write('a[',i,']='); Readln(a[i]);
End;
Write('Nhap so phan tu cua day con: m= '); Readln(m);
k:=1; {Vị trí phần tử đầu tiên của dãy con}
{Giả sử m phần tử đầu tiên của mảng A là dãy con có tổng lớn nhất}
Max:=0;
For i:=1 To m Do Max:=Max+A[i];
{Tìm các dãy con khác}
Trang 17


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
For i:=2 To n-m+1 Do
Begin
{Tính tổng của dãy con thứ i}
S:=0;

For j:=i To i+m-1 Do S:=S+A[j];
If S>Max Then {Nếu dãy con tìm được có tổng lớn hơn dãy con trước}
Begin
Max:=S; {Thay tổng mới}
k:=i;
{Thay vị trí đầu tiên của dãy con mới}
End;
End;
Writeln('Day con co tong lon nhat la:');
For i:=k To k+m-1 Do Write(A[i]:5);
Readln;
End.
ĐỀ THI CHỌN HỌC SINH GIỎI THÀNH PHỐ
[*****]
LỚP 9 - Năm học 2015-2016
MÔN: Tin học
Thời gian làm bài: 150 phút
( Đề thi gồm....3....câu, .......trang)
TỔNG QUAN VỀ ĐỀ THI
File chương
STT

trình nguồn

Bài 1
Bài 2
Bài 3

nộp
BAI1.PAS

BAI2.PAS
BAI3.PAS

File dữ liệu
vào
BAI1.INP
BAI2.INP
BAI3.INP

File kết quả ra
BAI1.OUT
BAI2.OUT
BAI3.OUT

Biểu
điểm
3,0 điểm
3,5 điểm
3,5 điểm

Chú ý:
- Bài thi được làm trên máy vi tính.
- Học sinh đặt tên file chương trình theo đúng quy định của từng bài, không ghi
bất kỳ thông tin cá nhân nào vào file bài làm (họ tên, số báo danh, ngày sinh,
trường, các ký hiệu khác thường,…)
- Trong quá trình làm, thường xuyên lưu bài vào đĩa cứng tránh sự cố mất điện đột
ngột, có thể mất bài.
- File input và output ở trong thư mục hiện hành, thí sinh không phải khai báo
đường dẫn đến file input và output.
Bài 1: Đếm số lần xuất hiện của các ký tự trong xâu

Trang 18


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
Yêu cầu: Cho ba xâu ký tự bao gồm các chữ cái tiếng Anh. Hãy kiểm tra số lần
xuất hiện của các ký tự trong xâu và ký tự xuất hiện nhiều lần nhất
Dữ liệu vào: Cho trong tệp BAI1.INP
- Gồm 3 dòng, mỗi dòng chứa một xâu ký tự, độ dài xâu ký tự không vượt quá
100 ký tự.
Kết quả: Ghi ra tệp BAI1.OUT
- Ghi trên các dòng số lần xuất hiện của các ký tự trong xâu và ký tự xuất hiện
nhiều lần nhất trong xâu đó

Ví dụ:
BAI1.INP

BAI1.OUT

-aaaaAabb

- Ký tự “a” xuất hiện 6 lần trong xâu
- Ký tự “b” xuất hiện 2 lần trong xâu
- Ký tự “a” xuất hiện nhiều lần nhất

Bài 2: Số nguyên tố gần
- Cho mảng gồm các số nguyên, hãy đưa ra mảng các số nguyên tố gần của
các số nguyên đó (trường hợp tìm được hai số nguyên tố gần với số trong
mảng thì đưa ra số nguyên tố gần bé hơn)
Ví dụ: Cho mảng ban đầu
5

1 6 15 10 21
Kết qủa hiện thị các số nguyên tố gần của mảng ban đầu
2 5 13 11 19
Dữ liệu vào: Cho trong tệp BAI2.INP
- Gồm 1 số nguyên dương N
- Mảng một chiều gồm các phần tử nguyên
Kết quả: Ghi ra tệp BAI2.OUT
- Ghi các số nguyên tố gần nhất của các phần tử mảng
Trang 19


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
Ví dụ:
BAI2.INP
BAI2.OUT
5
1 6 15 10 21
2 5 13 11 19
Bài 3: Trộn mảng
Cho dãy A gồm N phần tử nguyên dương

và dãy B gồm M

phần tử nguyên dương
Yêu cầu: Đưa ra dãy C gồm các phần tử của dãy A và B được sắp xếp theo thứ tự
tăng dần của các phần tử mảng, nếu các phần tử trong hai mảng trùng nhau thì giữ
nguyên.
Ví dụ: A= 2, 5, 21, 12, 6;
KQ: C= 2, 2, 3, 4, 5, 6, 6, 8, 12, 14, 21
Dữ liệu vào: Cho trong tệp BAI3.INP:

- Dòng 1: chứa giá trị N (số lượng phần tử của dãy A)
- Dòng 2: chứa N số nguyên dương là các giá trị của dãy A

- Dòng 3: chứa giá trị M (số lượng phần tử của dãy B)
- Dòng 4: chứa M số nguyên dương là các giá trị của dãy B

Kết quả: Ghi ra tệp BAI3.OUT: Ghi mảng trộn các phần tử được sắp xếp tăng dần
Ví dụ:
BAI3.INP
5
2, 5, 21,12,6
6

BAI3.OUT
11
2, 2,3, 4, 5, 6, 6, 8, 12, 14, 21

------------------ HẾT--------------------

Trang 20


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN

[*****]

ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI
THÀNH PHỐ
Lớp 9 - Năm học 2015 - 2016
MÔN:TIN HỌC

(Hướng dẫn chấm gồm 6.trang)

1. Thuật toán và code mẫu
Bài 1:
- Thuật toán: Sử dụng thuật toán truy cập tuần tự và biến đếm lưu vào
bộ nhớ
- Code mẫu
var
st:string;
max,i,n:integer;
ch:char;
a:string;
dem:array['A'..'Z'] of integer;
begin
writeln('xau can nhap la:');
readln(st) ;
{so lan xuat hien cua ki tu-ki tu xuat hien nhieu lan nhat}
for i:=1 to length(st) do
st[i]:=upcase(st[i]);
for ch:='A' to 'Z' do dem[ch]:=0;
for i:=1 to length(st) do
if (st[i]>='A') and (st[i]<='Z') then dem[st[i]]:=dem[st[i]]+1;
for ch:='A' to 'Z' do
if dem[ch]>=1 then
writeln('ki tu ',ch,' xuat hien ',dem[ch],' lan');
max:=0;
for ch:='A' to 'Z' do
if dem[ch]>=max then max:=dem[ch];
for ch:='A' to 'Z' do
if dem[ch]=max then

writeln('ki tu dai nhat co do dai la ’,max);
readln;
writeln;
end.

Trang 21


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN

Bài 2:
Thuật toán: Dùng thuật toán kiểm tra số nguyên tố
Code mẫu:
var A:array[1..50] of integer;
F:text;n,i:integer;
function snt(x:integer):boolean;
var j,dem:integer;
begin
dem:=0;
for j:=1 to x do
if x mod j = 0 then dem:=dem+1;
if dem=2 then snt:=true else snt:=false;
end;
function sntgan(x:integer):integer;
var j,k,t:integer;
begin
for j:=1 to x-1 do
if snt(j)=true then k:=j;
for j:=2*x downto (x+1) do
if snt(j)=true then t:=j;

if abs(k-x)=abs(t-x) then sntgan:=k
else
begin if abs(k-x)else sntgan:=t;
end;
end;
Begin
assign(F,'sntgan.inp');reset(F);readln(F,n);
for i:=1 to n do read(F,A[i]);close(F);
assign(F,'sntgan.out');rewrite(F);
for i:=1 to n do write(F,sntgan(A[i]):5);
close(F);
End.
sntgan;
Bài 3:
- Thuật toán: Dùng thuật tóan sắp xếp mảng
Trang 22


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
- Code mẫu:
var F:text;
n,m,i,k,h:integer;
A,B,C:array[1..50]of integer;
Procedure doctep;
Begin
assign(F,'tronmang.inp');reset(F);readln(F,n,m);
for k:=1 to n do read(F,A[k]);
for h:=1 to m do read(F,B[h]);
close(F);

end;
Procedure hienthi;
Begin
assign(F,'mangtron.out');rewrite(F);
i:=1;k:=1;h:=1;
while (k<=n) do begin C[i]:=A[k]; k:=k+1;i:=i+1;end;
while (h<=m) do begin C[i]:=B[h]; h:=h+1; i:=i+1;end;
end;
Begin
doctep;
hienthi;
for i:=1 to (n+m) do
write(F,C[i]:3);close(F);
End.

2. Bộ test
Bài 1: Xây dựng 5 test, mỗi test 0,6 điểm, trong thư mục BAI1 gửi kèm hướng
dẫn này , khi chấm thi học sinh đúng test nào được điểm test đó.
Test
input
output
1
hovaten
"h":1 lan
"o":1 lan
"v":1 lan
"a":1 lan
"t":1 lan
"e":1 lan
Trang 23



BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
"n":1 lan
ky tu dai nhat co do dai la 1
"a":5 lan
"b":4 lan
2
aaaaabbbbccc
"c": 3 lan
ky tu dai nhat co do dai la 5
"2":1 lan
"0":2 lan
3
2001
"1" 1 lan
ky tu dai nhat co do dai la 2
"n":1 lan
"a":1 lan
"m":2 lan
"o":1 lan
"i":1 lan
4
Nammoi2016
"2":1 lan
"0":1 lan
"1":1 lan
"6":1 lan
ky tu dai nhat co do dai la 2
"1":3 lan

"2":3 lan
5
123a123a123a
"3":3 lan
"a":3 lan
ky tu dai nhat co do dai la 3
Bài 2: Xây dựng 5 test, mỗi test 0,7 điểm, trong thư mục BAI2 gửi kèm hướng
dẫn này, khi chấm thi học sinh đúng test nào được điểm test đó.
Test
input
output
3
1
357
246
4
2
2 5 13 11
1 6 15 10
5
3
20 21 22 23 24 19 23 23 23 23
25
3
4
3 7 11
5 9 10
5
3
7 11 13

Trang 24


BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN
8 9 10
Bài 3: Xây dựng 5 test, mỗi test 0,7 điểm, trong thư mục BAI3 gửi kèm hướng
dẫn này, khi chấm thi học sinh đúng test nào được điểm test đó.
Test
input
output
3
246
2 3 4 6 8 10 12
1
5
45
10 12 45 3 8
3
246
2
2 4 6 10 12 45
3
10 12 45
5
13246
112233446
3
5
6
64231

3
597
4
2 4 5 7 8 9 10 11
5
4 10 11 2 8
3
987
5 7 8 9 10 15 20
5
5
60
20 60 15 5
10
------------Hết------------

Trang 25


×