PHềNG GIÁO DỤC–ĐÀO TẠOTRỰC NINH ĐỀ THI CHỌN HỌC SINH GIỎI NĂM HỌC 2009-2010 Mụn: TIN HỌC Lớp 9 ơ Thời gian làm bài: 120 phỳt khụng kể thời gian giao đề Lập chơng trình giải các bài toán
Trang 1PHềNG GIÁO DỤC–ĐÀO TẠO
TRỰC NINH ĐỀ THI CHỌN HỌC SINH GIỎI NĂM HỌC 2009-2010
Mụn: TIN HỌC Lớp 9
ơ
Thời gian làm bài: 120 phỳt (khụng kể thời gian giao đề)
Lập chơng trình giải các bài toán sau:
Bài 1 (6,0 điểm): Dãy số
Nhập vào một dãy số nguyên, mỗi số nằm trên một dòng
cho đến khi gặp số 0 thì dừng lại (số 0 không đợc tính vào
dãy) Yêu cầu in ra màn hình:
- Số lợng các số thoả mãn trong dãy
- Số lợng các số nguyên dơng
- Số lợng các số là số nguyên tố
- Số lợng các số chia hết cho 3
Ví dụ minh hoạ màn hình thực hiện chơng trình:
Nhap mot day so nguyen vao:
2
3
11
12
6
9
17
-8
2009
0
So cac so thoa man la:9
So cac so nguyen duong la:8
So cac so nguyen to la:4
So cac so chia het cho 3 la:4
Bài 2 (7,0 điểm): Trả tiền
Anh Nam đi chợ mua một mặt hàng có giá trị là N đồng Trong túi anh Nam có nhiều tờ tiền với mệnh giá là 50 đồng, 100
đồng và 200 đồng Anh Nam có thể có nhiều cách trả tiền để
mua mặt hàng đó (anh Nam chỉ dùng các tờ tiền mà anh có
sẵn Anh không đa thừa tiền cho ngời bán vì ngời bán không có tiền trả lại).
Yêu cầu: Cho biết số tiền N (N nguyên và 10<=N<=30000);
đa ra tất cả các cách trả tiền của anh Nam thỏa mãn
Input: Vào từ file văn bản TRATIEN.INP chứa duy nhất số tự nhiờn N
(10<= N<=30000)
Output: Ghi ra file văn bản TRATIEN.OUT nếu cú nhiều cỏch thỡ in mỗi
cỏch trờn một dũng, nếu khụng cú cỏch nào thỡ in ra số -1
Ví dụ minh hoạ màn hình thực hiện chơng trình:
ĐỀ CHÍNH THỨC
Trang 2200 0 x 50 + 0 x 100 + 1 x 200
0 x 50 + 2 x 100 + 0 x 200
2 x 50 + 1 x 100 + 0 x 200
4 x 50 + 0 x 100 + 0 x 200
Bài 3 ( 7,0 điểm) Mật khẩu
Một nhóm gồm k học sinh góp tiền mua một phần mềm dùng chung Khi cài đặt phần mềm này, người sử dụng cần phải nhập vào một mật khẩu Khi biết các khách hàng của mình là các học sinh say mê tin học, chủ cửa hàng thay vì đưa mật khẩu đã đưa cho mỗi bạn một con số khác nhau và sau đó nói rằng: Mật khẩu để cài đặt phần mềm là số nguyên dương nhỏ nhất gồm không quá chín chữ số chia hết cho bất cứ số nào trong các số tôi đã đưa cho các bạn
Yêu cầu: Biết tất cả các số mà chủ cửa hàng đã đưa cho các học sinh, hãy
tìm mật khẩu để cài đặt phần mềm.
Input: Vào từ file văn bản MATKHAU.INP Dòng đầu tiên chứa số học
sinh k (k <20) Dòng thứ hai chứa k số nguyên dương nhỏ hơn 20 mà ông chủ cửa hàng đã đưa cho các học sinh, hai số liên tiếp cách nhau bởi dấu cách
Output: Ghi ra file văn bản MATKHAU.OUT mật khẩu tìm được.
Ví dụ về input và output:
3
Chú ý: Bài 1 đặt tên là DAYSO.PAS
Bài 2 đặt tên là TRATIEN.PAS
Bài 3 đặt tên là MATKHAU.PAS
Hết
Trang 3-HƯỚNG DẪN CHẤM Bài 1: 6,0 điểm
Văn bản chơng trình
- Mỗi Text đúng cho (chạy chơng trình để cho điểm)
2,0 đ
- Đa ra khuôn dạng không đúng yêu cầu trừ
0,5đ
- Thuật toán không tối u trừ
0,5đ
uses crt;
var N,dem,demd,dem3,snt,i:longint;
Nt:boolean;
g:text;
begin
clrscr;
writeln('Nhap mot day so nguyen vao:');
dem:=0;demd:=0;dem3:=0;snt:=0;
repeat
readln(N);inc(dem);
if N>0 then inc(demd);
if N>1 then
begin
Nt:=true;
for i:=2 to trunc(sqrt(N)) do
if N mod i=0 then NT:=False;
if NT then inc(snt);
end;
if N mod 3=0 then inc(dem3);
until N=0;
writeln('So cac so thoa man la:',dem-1);
writeln('So cac so nguyen duong la:',demd);
writeln('So cac so nguyen to la:',snt);
writeln('So cac so chia het cho 3 la:',dem3-1);
readln;
end
Bài 2: 7,0 điểm
- Đa ra khuôn dạng không đúng yêu cầu trừ
0,5đ
- Nếu dùng 3 vòng for trừ
0,5đ
Văn bản chơng trình
Var N,a,b:Integer;
f,g:text;
kt:boolean;
Begin
assign(f,'tratien.inp');reset(f);
assign(g,'tratien.out');rewrite(g);
read(f,N);
kt:=true;
If N mod 50=0 Then
Trang 4For a:=0 to N div 50 do
For b:=0 to (N-50*a) div 100 do
If (N-50*a-100*b) mod 200 = 0 then
begin
Writeln(g,a,' x 50 + ',b,' x 100 + ',(N-50*a-100*b) div 200,' x 200'); kt:=false;
end;
if kt then write(g,-1);
close(f);close(g);
End
0 x 50 + 2 x 100 + 0 x 200
2 x 50 + 1 x 100 + 0 x 200
4 x 50 + 0 x 100 + 0 x 200
0 x 50 + 3 x 100 + 1 x 200
0 x 50 + 5 x 100 + 0 x 200
2 x 50 + 0 x 100 + 2 x 200
2 x 50 + 2 x 100 + 1 x 200
2 x 50 + 4 x 100 + 0 x 200
4 x 50 + 1 x 100 + 1 x 200
4 x 50 + 3 x 100 + 0 x 200
6 x 50 + 0 x 100 + 1 x 200
6 x 50 + 2 x 100 + 0 x 200
8 x 50 + 1 x 100 + 0 x 200
10 x 50 + 0 x 100 + 0 x 200
Bài 3: 7,0 điểm
- Mỗi Text đúng cho
1,0 đ
- Thuật toán không tối u trừ
0,5đ
Văn bản chơng trình
var f,g:text;
b,a:array[1 19] of Byte;
T,kq,du:longint;
N,i:Byte;
begin
assign(f,'matkhau.inp');reset(f);
assign(g,'matkhau.out');rewrite(g);
readln(f,N);
for i:=1 to N do read(f,a[i]):
kq:=a[1];
for i:=2 to N do
begin
T:=kq*a[i];
du:=kq mod a[i];
while du<>0 do
Trang 5begin
kq:=a[i];
a[i]:=du;
du:=kq mod a[i];
end;
kq:=T div a[i];
end;
writeln(g,kq);
close(f);close(g);
end
3
5
15 16 17 18 19
232560
5
9 10 11 12 13
25740
10
1 2 3 4 5 6 7 8 9 10
2520
10
10 11 12 13 14 15 16 17 18 19
232792560
15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
360360
19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
232792560