BỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNHBỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNHBỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNHBỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNHBỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNHBỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNHBỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNHBỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNHBỘ ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC LỚP 9 CÓ ĐÁP ÁN MỚI THẨM ĐỊNH
Trang 1ĐỀ THI CHỌN HỌC SINH GIỎI THÀNH PHỐ
LỚP 9 - Năm học 2015- 2016
MÔN: Tin họcThời gian làm bài: 150 phút
( Đề thi gồm 3câu, 2 trang)
TỔNG QUAN VỀ ĐỀ THI STT File chương trình
nguồn nộp
File dữ liệu vào
File dữ liệu ra Biểu đ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
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ụ:
ababababababa
4
Trang 2Bài 2: (3.5điểm): Số nguyên tố
Tạo một dãy số nguyên gồm n (3<n<20) số nguyên nhận các giái trị ngẫu nhiên từ
1 đế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
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
Trang 3( Đề thi gồm 3câu, 3 trang)
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)
Trang 5write('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);
Trang 6FUNCTION Opt( i, sum : longint ) : longint;
Var j, broj : longint;
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 7end;
End;
PROCEDURE Xuly( i, sum : longint );
Var f: text; j, broj : longint;
broj := broj * 10 + A[j];
if opt( i, sum ) = 1 + opt( j+1, sum-broj ) then begin
( Đề thi gồm 3 câu, 2 trang)
TỔNG QUAN VỀ ĐỀ THI
STT
File chương trình nguồn nộp
File dữ liệu vào File kết quả ra
Biểu điểm
Trang 8Bài 1 BAI1.PAS BAI1.INP BAI1.OUT 3,0 đ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ụ:
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 (1<i<=k) ai hoặc là số nguyên tố, hoặc phải là ước của một trong cá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ụ:
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 9tử 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
Trang 10ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI
THÀNH PHỐ Lớp 9 - Năm học 2015 - 2016
if (st[i]<'0') or (st[i]>'9') then so:=0;
if (st[i]>='0') and (st[i]<='9') then
Trang 11if dem=2 then snt:=true else snt:=false;
type mang=array[1 100] of integer;
var a:mang; n,i,k:integer;
Trang 13File dữ liệu vào File kết quả ra
Biểu đ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 14Ví dụ:
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ụ:
5
2 4 6 8 74
1 4 9 8
4 8
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 15Kết quả: Ghi ra tệp BAI3.OUT: Ghi chứa M số nguyên dương là các giá trị của
Trang 16If St[i] IN [‘0’ ’9’] Then OK:=TrueElse 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);
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;
Trang 17Procedure GiaoAB(n:Byte; A:Mang;m:Byte; B:Mang);
- 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
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 18For 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);
( Đề thi gồm 3 câu, trang)
TỔNG QUAN VỀ ĐỀ THI
STT
File chương trình nguồn nộp
File dữ liệu vào File kết quả ra
Biểu đ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 19Yê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ụ:
-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
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 20Yê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
Trang 21ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI
THÀNH PHỐ Lớp 9 - Năm học 2015 - 2016
{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;
Trang 22if x mod j = 0 then dem:=dem+1;
if dem=2 then snt:=true else snt:=false;
Trang 23while (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;
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 đó
Trang 24ky 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 đó
1 6 15 10 2 5 13 113
Trang 258 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 đó
1
3
2 4 65
20 60 15 5 10
5 7 8 9 10 15 20
60