Đề thi học sinh giỏi năm học 2010-2011 môn: tin học 9 thời gian làm bài: 150 phút (không kể thời gian giao đề)

Đề thi học sinh giỏi năm học 2010-2011 môn: tin học 9 thời gian làm bài: 150 phút (không kể thời gian giao đề)

Bài 1: Hoán vị ( 3 điểm)

 Tên file bài làm là: bailam1.pas

Viết chương trình liệt kê tất cả các hoán vị của tập {1, 2, ., n}

Ví dụ : Khi nhập dữ liệu vào là 3

Dữ liệu xuất ra của các hoán vị là

1 2 3

 

doc 7 trang Người đăng HoangHaoMinh Lượt xem 1907Lượt tải 1 Download
Bạn đang xem tài liệu "Đề thi học sinh giỏi năm học 2010-2011 môn: tin học 9 thời gian làm bài: 150 phút (không kể thời gian giao đề)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
UBND THÀNH PHỐ HỘI AN
PHÒNG GIÁO DỤC& ĐÀO TẠO
----------
ĐỀ CHÍNH THỨC
ĐỀ THI HỌC SINH GIỎI NĂM HỌC 2010-2011
Môn: Tin học 9
Thời gian làm bài: 150 phút
(Không kể thời gian giao đề)
Bài 1: Hoán vị ( 3 điểm)
 Tên file bài làm là: bailam1.pas
Viết chương trình liệt kê tất cả các hoán vị của tập {1, 2, ..., n}
Ví dụ : 	Khi nhập dữ liệu vào là 3
Dữ liệu xuất ra của các hoán vị là
1	2	3
1	3	2
2	1	3
2	3	1
3	1	2
3	2	1
Bài 2: Số nguyên tố ( 3 điểm) 
( 3 điểm ) Tên file bài làm là: bailam2.pas
Với mỗi số tự nhiên N ( 1 £ N £ 1000). Tìm các số tự nhiên M £ N thoả mãn: 
	+/ M là một số nguyên tố.
	+/ Tổng các chữ số của M cũng là một số nguyên tố.
Yêu cầu: Nhập số tự nhiên N (1 £ N £ 1000). Thông báo số lượng các số tự nhiên M thỏa mãn các yêu cầu trên, đó là các số nào?
Dữ liệu vào Số tự nhiên N
Dữ liệu ra Dòng 1: Ghi các số M thỏa mãn yêu cầu
 Dòng 2: Số lượng các số tự nhiên M thỏa mãn
Ví dụ: Dữ liệu vào 10
Dữ liệu ra
2 3 5 7
4
Bài 3 :Số bền( 4 điểm)
Tên file bài làm là: bailam3.pas
Năm 1973, nhà Toán học Neil Sloan đưa ra khái niệm độ bền của một số nguyên không âm N như sau:
Nếu N có một chữ số thì độ bền của N bằng 0.
Nếu N có từ 2 chữ số trở lên thì độ bền của N bằng độ bền của số nguyên là tích các chữ số của N cộng 1.
Cho N, tính độ bền của N.
Dữ liệu vào từ file văn bản: sobent.inp
Dòng 1: Số nguyên N (0 ≤ N ≤ 2.000.000.000).
Kết quả ghi ra file văn bản: soben..out
Dòng 1: Số nguyên là độ bền của N.
Ví dụ
soben.inp
soben.out
Giải thích
99
2
Doben(99)=Doben(81)+1=Doben(8)+1+1=0+1+1=2
-----------------------------o0o-----------------------------------
Cán bộ coi thi không giải thích gì thêm.
HƯỚNG DẪN CHẤM TIN HỌC 9 NĂM HỌC 2010-2011
Đáp án bài 1: ( 3 đ)
program hoanvi;
uses Crt;
var
 kt:array[1..50] of boolean;n:byte;
 x:array[1..50] of byte;
-----------------------------------------> 0,5đ
procedure try(j:byte);var k,i:byte;
begin
 for i:=1 to n do
 if kt[i] then
 begin
 x[j]:=i;
 kt[i]:=false;
 if j=n then
 begin
 for k:=1 to n do write(x[k]:4);
 writeln;
 end
 else try(j+1);
 kt[i]:=true;
 end;
end;
------------------------------------------> 1 đ
procedure lietke(n:byte);var i:byte;
begin
for i:=1 to n do kt[i]:=true;
try(1);
end;
-------------------------------------------> 1đ
begin
writeln('nhap so chu so can hoan vi');
readln(n);
writeln('cac hoan vi la:');
lietke(n);
readln;
end.
--------------------------------------------> 0,5 đ
===================================================
Đáp án bài 2 ( 3 đ)
Program bai2;
Var m,n,i,j,k,d:Longint;
 Function nto(n:Longint):Longint;
 Var i:Longint;
 Begin
 d:=0;
 For i:=2 to n div 2 do
 If N mod i = 0 then Inc(d);
 If (d=0)and(n1) then nto:=n;
 End;
---------------------------------------------------------> 0,75 đ
 Function Sum(m:Longint):Longint;
 Var s:Longint;
 Begin
 s:=0;
 Repeat
 s:=s+ m mod 10;
 m:= m div 10;
 Until m=0;
 Sum:=s;
 End;
---------------------------------------------------------> 0,75 đ
 Procedure XULI;
 Var n,d:Longint;
 Begin
 Write(' N= '); Readln(N);
 if (n>=1) and (n<=1000) then
 begin
 d:=0;
 For i:= 2 to N do
 If (nto(i)=i)and(nto(Sum(i))=Sum(i)) then
 Begin
 Inc(d);
 Write(i:5);
 End;
 Writeln;
 Writeln(' TIM THAY ',d:5,' SO THOA MAN');
 End
 else write('0');
 END;
Begin
XULI;
Readln;
End.
----------------------------------------------------------> 1,5 đ
===================================================================
program bai3 ( 4 đ)
Var f,g:text;
 d,n:longint;
Function tich(x:longint):longint;
Var s,a:longint;
-----------------------------------------------------------------------> 1 đ
Begin
 s:=1;
 repeat
 a:=x mod 10;
 x:=x div 10;
 s:=s*a;
 until x=0;
 tich:=s;
End;
------------------------------------------------------------------------> 1 đ
BEGIN
Assign(f,'soben..inp'); Reset(f);
Assign(g,'soben.out'); Rewrite(g);
Read(f,n);
d:=0;
While n>9 do
 begin
 inc(d);
 n:=tich(n);
 end;
---------------------------------------------------------------------------> 1,5 đ
Write(g,d);
Close(g);
Close(f);
END.
---------------------------------------------------------------------------> 0,5
Trong quá trình chấm giám khảo căn cứ vào kết quả thực hiện được trên máy để cho điểm tối đa. Nếu chương trình không chạy được thì mới rà soát lại quá trình từng thao tác của thí sinh để cho điểm những ý mà thí sinh làm được.
COPY RA ĐỂ CHẠY THỬ TRÊN MÁY
Đáp án bài 1:
program hoanvi;
uses Crt;
var
 kt:array[1..50] of boolean;n:byte;
 x:array[1..50] of byte;
procedure try(j:byte);var k,i:byte;
begin
 for i:=1 to n do
 if kt[i] then
 begin
 x[j]:=i;
 kt[i]:=false;
 if j=n then
 begin
 for k:=1 to n do write(x[k]:4);
 writeln;
 end
 else try(j+1);
 kt[i]:=true;
 end;
end;
procedure lietke(n:byte);var i:byte;
begin
for i:=1 to n do kt[i]:=true;
try(1);
end;
begin
writeln('nhap so chu so can hoan vi');
readln(n);
writeln('cac hoan vi la:');
lietke(n);
readln;
end.
===================================================
Đáp án bài 2
Program bai2;
Var m,n,i,j,k,d:Longint;
 Function nto(n:Longint):Longint;
 Var i:Longint;
 Begin
 d:=0;
 For i:=2 to n div 2 do
 If N mod i = 0 then Inc(d);
 If (d=0)and(n1) then nto:=n;
 End;
 Function Sum(m:Longint):Longint;
 Var s:Longint;
 Begin
 s:=0;
 Repeat
 s:=s+ m mod 10;
 m:= m div 10;
 Until m=0;
 Sum:=s;
 End;
 Procedure XULI;
 Var n,d:Longint;
 Begin
 Write(' N= '); Readln(N);
 if (n>=1) and (n<=1000) then
 begin
 d:=0;
 For i:= 2 to N do
 If (nto(i)=i)and(nto(Sum(i))=Sum(i)) then
 Begin
 Inc(d);
 Write(i:5);
 End;
 Writeln;
 Writeln(' TIM THAY ',d:5,' SO THOA MAN');
 End
 else write('0');
 END;
Begin
XULI;
Readln;
End.
===================================================================
program bai3
Var f,g:text;
 d,n:longint;
Function tich(x:longint):longint;
Var s,a:longint;
Begin
 s:=1;
 repeat
 a:=x mod 10;
 x:=x div 10;
 s:=s*a;
 until x=0;
 tich:=s;
End;
BEGIN
Assign(f,'soben..inp'); Reset(f);
Assign(g,'soben.out'); Rewrite(g);
Read(f,n);
d:=0;
While n>9 do
 begin
 inc(d);
 n:=tich(n);
 end;
Write(g,d);
Close(g);
Close(f);
END.

Tài liệu đính kèm:

  • docthi_hoc_sinh_gioi_tin_pgdhoian.doc