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

TỔNG HỢP ĐỀ THI HỌC SINH GIỎI TIN HỌC KHÔNG CHUYÊN CÓ ĐÁP ÁN

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 (296.84 KB, 23 trang )

HỘI THI TIN HỌC TRẺ KC
NĂM 2012

ĐỀ THI PHẦN THỰC HÀNH
BẢNG B - THCS
Thời gian làm bài: 120 phút
Ngày thi: 30-03-2012

YÊU CẦU CHUNG:
- Nếu thí sinh không sử dụng tệp dữ liệu vào ra, có thể nhập dữ liệu từ bàn
phím và xuất kết quả ra màn hình.
- Tạo thư mục với tên theo quy định C2_SBD trong ổ D:\ (trong đó SBD là số
báo danh của thí sinh). Các bài làm của thí sinh phải lưu trong thư mục này.
- Sử dụng ngôn ngữ lập trình Turbo Pascal hoặc Free Pascal để viết chương
trình. Đặt tên các bài làm và tên tệp dữ liệu theo quy định trong bảng sau:
Stt
Bài
Quy định đặt tên tệp
Quy định tên tệp
Quy định tên tệp
chương trình
dữ liệu vào
dữ liệu ra
1
Bài 1
Bai1.Pas
Nhập từ bàn phím
Xuất ra màn hình
2
Bài 2
Bai2.Pas


Nhập từ bàn phím
Xuất ra màn hình
3
Bài 3
Bai3.Pas
Nhập từ bàn phím
Xuất ra màn hình
4
Bài 4
Bai4.Pas
Nhập từ bàn phím
Xuất ra màn hình
Bài 1: (20 điểm):
Viết chương trình tính tổng S= 1+1.2+1.2.3+…+1.2.3…N (N<=30)
Dữ liệu vào: Nhập từ bàn phím
Kết quả ra: Xuất ra màn hình
Ví dụ:
Nhập từ bàn phím
Xuất ra màn hình
4
33
Bài 2: (20 điểm):
Số chính phương là một số nguyên có căn bậc hai là một số nguyên (ví dụ: 9 là
số chính phương vì 9 =3). Viết chương trình tìm, đếm và tính tổng các số chính
phương có trong dãy số nguyên dương gồm N phần tử A1, A2, …, AN.
Dữ liệu vào: Nhập từ bàn phím.
Kết quả ra: Xuất ra màn hình gồm 3 dòng:
- Dòng 1 ghi các số chính phương của dãy giữ nguyên thứ tự xuất hiện (mỗi số
cách nhau một dấu cách).
- Dòng 2 ghi số lượng số chính phương trong dãy.

- Dòng 3 ghi tổng của các số chính phương trong dãy.
Ví dụ:
Nhập từ bàn phím
Xuất ra màn hình
N=7
4 100 25 36
11 4 100 5 25 36 10
4
165
Bài 3: (20 điểm)
Viết chương trình phân tích một số nguyên dương ra thừa số nguyên tố.
1


Dữ liệu vào: Nhập từ bàn phím số nguyên dương N
Kết quả ra: Xuất ra màn hình
Ví dụ:
Nhập từ bàn phím
Xuất ra màn hình
100
100│2
50│2
25│5
5│5
1│
Bài 4: (20 điểm) TỔNG CÁC SỐ FIBONACI
Dãy Fibonaci là dãy gồm các số: 1, 1, 2, 3, 5, 8, .... được xác định bởi công
thức sau:
F1=1, F2=1, Fi=Fi-1+Fi-2 với i>2.
Em hãy biểu diễn một số tự nhiên N thành tổng của ít nhất các số Fibonaci

khác nhau.
Dữ liệu vào: Nhập từ bàn phím số N (N ≤ 2000000000)
Dữ liệu ra: Xuất ra màn hình

Ví dụ:
Nhập từ bàn phím
129

Xuất ra màn hình
129 = 89 + 34 + 5 + 1

Nhập từ bàn phím
8

Xuất ra màn hình
8=8

Hoặc

------------Hết------------

2


BÀI GIẢI
Bài 1: (20 điểm):
Viết chương trình tính tổng S= 1+1.2+1.2.3+…+1.2.3…N (N<=30)
Dữ liệu vào: Nhập từ bàn phím
Kết quả ra: Xuất ra màn hình
Ví dụ:

Nhập từ bàn phím
Xuất ra màn hình
4
33
PROGRAM TONG_GT;
USES CRT;
VAR TAM,I,N,S:INTEGER;
BEGIN
CLRSCR;
WRITELN(CHUONG TRINH TINH TONG S=1+1.2+1.2.3+..+1.2.3...N LA');
WRITE(‘NHAP VAO MOT SO: ‘);READLN(N);
S:=0;
TAM:=1;
FOR I:=1 TO N DO
BEGIN
TAM:=TAM*I;
S:=S+TAM;
END;
WRITE('TONG S= ',S);
WRITELN(‘DA XU LY XONG !’);
READLN;
END.

Bài 2: (20 điểm):
Số chính phương là một số nguyên có căn bậc hai là một số nguyên (ví dụ: 9 là
số chính phương vì 9 =3). Viết chương trình tìm, đếm và tính tổng các số chính
phương có trong dãy số nguyên dương gồm N phần tử A1, A2, …, AN.
Dữ liệu vào: Nhập từ bàn phím.
Kết quả ra: Xuất ra màn hình gồm 3 dòng:
- Dòng 1 ghi các số chính phương của dãy giữ nguyên thứ tự xuất hiện (mỗi số

cách nhau một dấu cách).
- Dòng 2 ghi số lượng số chính phương trong dãy.
- Dòng 3 ghi tổng của các số chính phương trong dãy.
Ví dụ:
Nhập từ bàn phím
Xuất ra màn hình
N=7
4 100 25 36
11 4 100 5 25 36 10
4
165
program So_Chinh_Phuong;
uses crt;
var n,i,j,dem,tong,tam:integer;
a:array[1..100] of integer;
3


function kt_cp(k:integer):boolean;
var i:integer;
begin
kt_cp:=false;
for i:=1 to k do
if i*i=k then kt_cp:=true;
end;
procedure NHAPMANG;
begin
WRITE(‘NHAP VAO MOT SO: ‘);readln(n);
for i:=1 to n do
BEGIN

WRITE(‘A[‘,I,’]: ‘);READLN(a[i]);
END;
end;
begin
clrscr;
NHAPMANG;
dem:=0;
tong:=0;
for i:=1 to n do
begin
if kt_cp(a[i]) then
begin
dem:=dem+1;
write(a[i]:5);
tong:=tong+a[i];
end;
end;
writeln(dem);
writeln(tong);
writeln('da xu ly xong');
readln;
end.
Bài 3: (20 điểm)
Viết chương trình phân tích một số nguyên dương ra thừa số nguyên tố.
Dữ liệu vào: Nhập từ bàn phím số nguyên dương N
Kết quả ra: Xuất ra màn hình
Ví dụ:
Nhập từ bàn phím
Xuất ra màn hình
100

100│2
50│2
25│5
5│5
1│
4


PROGRAM Phan_Tich_SNT;
uses crt;
VAR i,n :INTEGER;
BEGIN
clrscr;
WRITE(‘NHAP VAO MOT SO: ‘);READLN(N);
i:=2;
REPEAT
WHILE n MOD i <> 0 DO i:=i+1;
Writeln(n:5,' | ',i:2);
n:=n DIV i;
UNTIL n = 1;
writeln(1:5,' |');
writeln('Da xu ly xong !');
readln;
END.
Bài 4: (20 điểm) TỔNG CÁC SỐ FIBONACI
Dãy Fibonaci là dãy gồm các số: 1, 1, 2, 3, 5, 8, .... được xác định bởi công
thức sau:
F1=1, F2=1, Fi=Fi-1+Fi-2 với i>2.
Em hãy biểu diễn một số tự nhiên N thành tổng của ít nhất các số Fibonaci
khác nhau.

Dữ liệu vào: Nhập từ bàn phím số N (N ≤ 2000000000)
Dữ liệu ra: Xuất ra màn hình
Ví dụ:
Nhập từ bàn phím
Xuất ra màn hình
129
129 = 89 + 34 + 5 + 1
Hoặc
Nhập từ bàn phím
8

Xuất ra màn hình
8=8

program tong_fibonanci;
Uses crt;
var i,j,n:integer;
a:array[1..1000] of longint;
function fib(k:integer):longint;
begin
a[1]:=1;
a[2]:=1;
a[3]:=2;
if a[k]=-1 then a[k]:=fib(k-1)+fib(k-2);
fib:=a[k];
end;
begin
clrscr;
write(‘NHAP VAO MOT SO: ’);READLN(N);
for i:=1 to 1000 do a[i]:=-1;

5


while n>0 do
begin
i:=1;
while fib(i)<=n do i:=i+1;
j:=fib(i-1);
if i<=n then write(j,' + ')
else write (j);
n:=n-j;
end;
writeln('da xu ly xong');
readln;
end.

------------Hết------------

SỞGIÁO DỤC & ĐÀO TẠO
ĐỀTHI CHÍNH THỨC

ĐỀTHI TIN HỌC TRẺKHÔNG CHUYÊN
NĂM HỌC 2010 - 2011
Môn : TIN HỌC - THCS

6


(Đề thi có 02 trang, gồm 3 bai)
Câu truc đê thi:

STT
Tên bai
1
PHƯƠNG TRÌNH
2
SỐNGUYÊN TỐ
3
NÉN XÂU
4
CẤP SỐCỘNG

Thời gian : 150 phút (không kể thời gian giao đề)
Ngày thi : 18/2/2011
Tên file bai lam
BAI1.PAS
BAI2.PAS
BAI3.PAS
BAI4.PAS

Tên file INPUT
Nhập từ ban phím
Nhập từ ban phím
Nhập từ ban phím
Nhập từ ban phím

Tên file OUTPUT
Xuât ra man hình
Xuât ra man hình
Xuât ra man hình
Xuât ra man hình


Bài 1: (4 điểm): Giải và biện luận bất phương trình dạng ax+b>=0
Bai 2: (6 điểm):
Viết chương trình tìm, đếm và tính tổng các số nguyên tố có trong dãy s ố
nguyên dương gồm N phần tử A1, A2, …, AN.
Dữ liệu vào: NhẬP từ bàn phím số nguyên dương N (N<=10000), dòng ti ếp
theo ghi N số nguyên dương (mỗi số cách nhau một dấu cách).
Kết quả ra: Xuất ra màn hình gồm các dòng
- Dòng 1 ghi các số nguyên tố của dãy giữ nguyên thứ tự xuất hiện (m ỗi s ố
cách nhau một dấu cách).
- Dòng 2 ghi số lượng số nguyên tố trong dãy.
- Dòng 3 ghi tổng của các số nguyên tố trong dãy.
Ví dụ:
Xuât ra man hình
Nhập từ bàn phím
7
11 7 5 17
11 4 7 5 25 17 10
4
40
Bài 3: (4 điểm):
Một xâu kí tự có thể nén lại thành 1 một xâu mới bằng cách nén các kí tự giống
nhau đứng cạnh nhau. Ví dụ trong xâu AAAA sẽ nén thành 4A. Hãy lập trình
để nén 1 xâu kí tự in hoa theo cách trên.
VD: Nhập: ABBCCCDXH
Xuất: A2B3CCXH
Bài 4: (6 điểm)
Cho ma trận M*N gồm các số nguyên (M,N<100). Viết chương trình kiểm
tra các phần tử trong ma trận có thể lập thành một cấp số cộng hay không ? Nếu có
cho biết công sai.

Dữ liệu vào: Nhập từ bàn phím:
+ Dòng đầu ghi số nguyên dương M, N (M, N<=10000) số dòng, số cột ma
trận.
+ Các dòng tiếp theo ghi (M,N) số nguyên dương (m ỗi số cách nhau m ột
dấu cách).
Kết quả ra: Xuất ra màn hình gồm 2 dòng:
- Nếu tạo thành cấp số cộng thì ghi:
+ Dòng 1: LA CAP SO CONG.
+ Dòng 2: CONG SAI
- Nếu không tạo thành cấp số cồng thì ghi:
+ KHONG LAP THANH CAP SO CONG
7


VD:
Nhập từ bàn phím
43
5 11 9 15
19 1 15 13
3 17 7 21

Xuất ra màn hình
LA CAP SO CONG
CONG SAI 2

Hoặc
Nhập từ bàn phím
43
5 11 9 15
19 1 15 23

3 17 7 21

Xuất ra màn hình
KHONG LAP THANH CAP SO CONG

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

BÀI GIẢI
Bài 1:

PROGRAM GIAI_BPT;
USES CRT;
VAR A,B:REAL;
BEGIN
CLRSCR;
WRITE('NHAP VAO SO A = ');READLN(A);
WRITE('NHAP VAO SO B = ');READLN(B);
IF (A<>0) THEN
BEGIN
IF (A>0) THEN WRITELN('PT CO NGHIEM LA X >= ',-B/A:2:2)
ELSE WRITELN('PT CO NGHIEM LA X < ',-B/A:2:2);
END
ELSE
BEGIN
8


IF (B>=0) THEN WRITELN('PT CO VO SO NGHIEM')
ELSE WRITELN('PT VO NGHIEM');
END;

READLN;
END.
Bài 2:
program so_nguyen_to;
uses crt;
var a:array[1..100] of integer;
tong,dem,i,n:integer;
function ktnt(k:integer):boolean;
var i:integer;
begin
ktnt:=false;
if k<2 then exit;
for i:=2 to trunc(sqrt(k)) do
if k mod i = 0 then exit;
ktnt:=true;
end;

procedure NHAPMANG;
begin
WRITE(‘NHAP VAO MOT SO: ‘);readln(n);
for i:=1 to n do
BEGIN
WRITE(‘A[‘,I,’]: ‘);READLN(a[i]);
END;
end;
BEGIN
CLRSCR;
NHAPMANG;
dem:=0;
tong:=0;

writeln('So Nguyen to co trong day la:');
for i:=1 to n do
begin
if ktnt(a[i])=true then
begin
dem:=dem+1;
write(a[i]:5,' ');
tong:=tong+a[i];
end;
end;
writeln( dem);
writeln(tong);
writeln('Da xu ly xong');
READLN;
END.
Bài 3:

program xau_ky_tu;
var ch:char;
9


i,n:integer;
st,s:string;
begin
write(‘Nhap vao mot chuoi: ‘);readln(st);
s:=st[1];
for i:=2 to length(st) do
if st[i]=s[1] then s:=s+st[i]
else

begin
if length(s)>1 then write (length(s));
write(s[1]);
s:=st[i];
end;
if length (s)=1 then write(s)
else write (length(s),s[1]);
writeln('da xu ly xong');
readln;
end.
Bài 4:
PROGRAM CT;
USES CRT;
TYPE mang=array[1..100,1..100] of integer;
Var TAM,I,J,CS,D,M,N:integer;
A:mang;
KTCS:BYTE;
B:ARRAY[1..100] OF INTEGER;
{------------------------------}
Procedure nhapmang(Var A:Mang);
Begin
Write(‘Cho biet so cot: ‘);readln(n);
Write(‘Cho biet so dong: ‘);readln(m);
For i:=1 to n do
For j:=1 to m do
BEGIN
Write(‘a[‘,I,’]: ‘);Readln(A[i,j]);
END;
End;
{-------------------------------}

BEGIN
clrscr;
D:=0;B[D]:=0;
Nhapmang(a);
{Chuyen ma tran sang mang 1 chieu}
FOR I:=1 TO M DO
FOR J:=1 TO N DO
BEGIN
D:=D+1;
B[D]:=A[I,J];
END;
{Sap xep mang 1 chieu}
FOR I:=1 TO n*m-1 DO
FOR J:=I+1 TO n*m DO
IF B[I]>B[J] THEN
BEGIN

10


TAM:=B[I];
B[I]:=B[J];
B[J]:=TAM;
END;
{Kiem tra cap so cong}
CS:=B[2]-B[1];
for i:=1 to n*m-1 do
BEGIN
J:=I+1;
if((B[J]-B[i])<>CS)then

BEGIN
KTCS:=1;
BREAK;
END;
END;
writeln;
if ktcs=1 then writeln('KHONG LAP THANH CAP SO CONG')
else
begin
writeln('LA CAP SO CONG');
writeln('Cong sai: ',CS);
end;
writeln('Da xu ly xong !');
READLN
END.

SỞGIÁO DỤC & ĐÀO TẠO
ĐỀTHI CHÍNH THỨC
(Đề thi có 02 trang, gồm 3 bai)
Câu truc đê thi:
STT
Tên bai
1
FIBONANCI
2
CẤP SỐCỘNG
3
MA TRẬN
4


CHUỖI

ĐỀTHI TIN HỌC TRẺKHÔNG CHUYÊN
NĂM HỌC 2010 - 2011
Môn : TIN HỌC - THCS
Thời gian : 150 phút (không kể thời gian giao đề)
Ngày thi : 18/2/2011
Tên file bai lam
Tên file INPUT
BAI1.PAS
Nhập từ ban phím
BAI2.PAS
Nhập từ ban phím
BAI3.PAS
Nhập từ ban
phím
BAI4.PAS
Nhập từ ban
phím

Tên file OUTPUT
Xuât ra man hình
Xuât ra man hình
Xuât ra man hình

Xuât ra man hình

Bai 1: (4 điểm)
Viết chương trình nhập vào một số nguyên dương N. Xuất ra số Fibonanci
thứ N

VD: Nhập N = 10
Xuất: 55
Bai 2: (6 điểm)
Viết chương trình kiểm tra xem một mảng số nguyên cho trước có lập thành
một cấp số cộng hay không ? Nếu có cho biết công sai.
11


Dữ liệu vào: Nhập từ bàn phím:
+ Dòng đầu ghi số nguyên dương N (N<=10000),
+ Dòng tiếp theo ghi N số nguyên dương (mỗi số cách nhau một dấu cách).
Kết quả ra: Xuất ra màn hình gồm:
- Nếu tạo thành cấp số cộng thì ghi:
+ Dòng 1: LA CAP SO CONG.
+ Dòng 2: CONG SAI
- Nếu không tạo thành cấp số cộng thì ghi:
+ KHONG LAP THANH CAP SO CONG
VD:
Nhập từ bàn phím
Xuất ra màn hình
7
LA CAP SO CONG
5 11 9 15 13 7 17
CONG SAI 2

Hoặc
CAPSO.INP
4
5 11 9 15


CAPSO.OUT
KHONG LAP THANH CAP SO CONG

Bai 3: (5 điểm)
Viết chương trình nhập vào ma trận M dòng, N cột. Xuất ra màn hình
a/ Ma trận vừa nhập
b/ Xuất ra dòng có tổng lớn nhất.
c/ Nhập vào một số cần tìm. Kiểm tra xem trong mảng số vừa nhập tìm
nằm ở dòng mấy ? cột mấy ?
VD: Nhập m=4; n=4
5 3 8 -10
6894
6 10 5 12
9 10 -5 25
Xuât:
5 3 8 -10
6894
6 10 5 12
9 10 -5 25
+ Dòng 4 co tong lon nhat: 39
+ Nhập: 10
- Số 10 xuất hiện dòng 3 cột 2
- Số 10 xuất hiện dòng 4 cột 2
Bai 4: (5 điểm)
Viết chương trình nhập vào một chuỗi gồm các ký tự ‘a ..z’ và ‘A..Z’ và
‘0..9’ nhập liên tục không có khoảng trắng và xen kẻ nhau giữa các số và chữ có
độ dài L (4 ký tự VD: Nhập vào chuỗi: ab2314ZS23Z34c
Xuất ra: 2 3 1 4 2 3 3 4
Tong cac chu so co trong chuoi: 2+3+1+4+2+3+3+4=22


12


----------Hết-----------

BÀI GIẢI
Bài 1:
program xuat_so_fibonanci;
uses crt;
var i,n,s,a,b:integer;
begin
clrscr;
write('nhap vao n:=');readln(n);
b:=1;
i:=2;
a:=1;
while (ibegin
i:=i+1;
if i mod 2=1 then a:=a+b
else b:=b+a;
end;
if i mod 2=1 then write('So Fibonanci thu ',n,'
la: ',a)
else writeln('So Fibonanci thu ',n,' la: ',b);
readln;
end.
{-----------------------------------------------------}
Bài 2:

program sap_xep;
var d,i,tam,n,k:integer;
a:array[1..100]of integer;
Procedure nhapmang;
Begin
Write(‘Nhap vao mot so: ‘);readln(n);
For i:=1 to n do
BEGIN
Write(‘a[‘,I,’]: ‘);Readln(A[i,j]);
END;
End;

13


function ktcs:boolean;
var i:integer;
begin
ktcs:=false;
d:=a[1]-a[2];
for i:=1to n -1do
if(a[i]-a[i+1]<>d)then exit;
ktcs:=true;
end;
procedure sapxep;
begin
for i:=1 to n -1do
for k:=i+1 to n do
begin
tam:=a[i];

a[i]:=a[k];
a[k]:=tam;
end;
end;
begin {chuong trinh chinh}
nhapmang;
sapxep;
if ktcs then
begin
writeln('La cap so cong');
writeln('Cong sai la ',d:0:2);
end
else
writeln('Khong lap thanh cap so cong');
writeln(‘Da xu ly xong’);
readln;
end.
{------------------------------------}
Bài 3:
program vd;
uses crt;
var a:array[1..100,1..100] of integer;
s:array[1..100] of integer;
n,m,dem,i,j,n:integer;
procedure nhapmang;
begin
write(‘Nhap vao so dong: ‘);readln(m);
write(‘Nhap vao so cot: ‘);readln(n);
for i:=1 to m do
14



for j:=1 to n do
begin
write('a[',i,j,']: ');readln(a[i,j]);
end;
end;
Procedure TongCacDong;
Var S : Real;
Begin
For i:=1 to M do
Begin
S := 0;
For j :=1 to N do
S := S + A[i, j];
Writeln( ‘Tong dong ‘, i ,’ la: ‘, S:0:2);
End;
End;

Begin {chuong trinh chinh}
clrscr;
writeln('Nhap mang co m dong n cot');
nhapmang;
for i:=1 to m do
begin
for j:=1 to n do
write(a[i,j]:5);
writeln;
end;


TongCacDong;
dem:=0;
writeln;
write('Nhap vao so can tim: ');readln(n);
for i:=1 to m do
for j:=1 to n do
if n=a[i,j] then
begin
dem:=dem+1;
writeln('So ',n,' xuat hien ',dem,' lan tai
dong ',i,' cot ',j);
end;
readln;
end.
{---------------------------------------------------}
Bài 4:
program chuoi;
uses crt;
var s:string[30];
n:array[1..100] of integer;
tong,code,ch,i,j:integer;

15


begin
clrscr;
write('Nhap chuoi: ');readln(s);
writeln('Cac so co trong chuoi vua nhap la:');
ch:=length(s);

tong:=0;
for i:=1 to ch do
begin
val(s[i],n[i],code);
if code = 0 then
begin
write(n[i]:2);
tong:=tong+n[i];
end;
end;
writeln;
writeln('Tong cac so nay la: ',tong);
readln;
end.

SỞGIÁO DỤC & ĐÀO TẠO

KÌ THI CHỌN HỌC SINH GIỎI CẤP TỈNH
NĂM HỌC 2010 - 2011

ĐỀTHI CHÍNH THỨC
(Đề thi có 02 trang, gồm 3 bai)

Môn : TIN HỌC - THCS
Thời gian : 150 phút (không kể thời gian giao đề)
Ngày thi : 18/2/2011

Câu truc đê thi:
STT
Tên bai

1
PHÂN TƯYÊN NGƯA
2
3

SỐNGUYÊN TỐVÀ
SỐFIBONACI
SỐSIÊU NGUYÊN
TỐ

Tên file bai lam
PTYN.PAS
FIBO.PAS

SIEUNT.PAS

Tên file INPUT
Nhập từ ban
phím
Nhập từ ban
phím
Nhập từ ban
phím

Tên file OUTPUT
Xuât ra man hình
Xuât ra man hình
Xuât ra man hình

Bai 1: (6 điểm) PHÂN TƯYÊN NGƯA

Cho mảng 2 chiều A có kích thước MxN số nguyên. Phần tử A[i,j] được gọi là phần
tử yên ngựa nếu nó là phần tử nhỏ nhất trong hàng i đồng thời là phần tử lớn nhất trong
cột j.
Em hãy lập chương trình tìm phần tử yên ngựa của mảng A.
Dữ liệu vào: Nhập từ bàn phím gồm:
- Dòng đầu tiên gồm 2 số M, N (0 ≤ M,N ≤100)
- M dòng tiếp theo, mỗi dòng gồm có N số nguyên của mảng A
(các giá trị cách nhau ít nhất 1 khoảng cách).
Dữ liệu ra: Xuất ra màn hình vị trí của các phần tử yên ngựa (nếu có) hoặc dòng
thông báo “Không có phần tử yên ngựa”.
Ví dụ:
Nhập từ bàn phím
Xuất ra màn hình
33
(2,2)
15
3
9

16


55
76

4
1

6
2


Hoặc :
Nhập từ bàn phím
33
15
10
5
55
4
6
76
1
2

Xuất ra nàm hình
Khong co phan tu yen ngua

Bai 2: (7 điểm) SỐNGUYÊN TỐVÀSỐFIBONACI
Dãy FIBONACI là dãy được xác định như sau: F(0) = 0; F(1) = 1 và F(n) = F(n-1) + F(n-2)
với n = 2, 3... Hãy viết chương trình máy tính để nhập từ bàn phím số nguyên dương M
(2hơn M.

Ví dụ: Với M=10 thì các số FIBONACI nh ỏ h ơn M l à: 0, 1, 1, 2, 3, 5, 8. S ố
5 là số nguyên tố lớn nhất trong các số FIBONACI nhỏ h ơn M. V ậy c ần đưa ra
màn hình dòng thông báo kết quả: Số cần tìm là: 5.
Dữ liệu vào: Nhập từ bàn phím số N (N ≤ 2000000000)
Dữ liệu ra: Xuất ra màn hình biểu diễn số N thành tổng của ít nhất các số Fibonaci
khác nhau.
Bai 3: (6 để

i m) SỐSIÊU NGUYÊN TỐ
Số siêu nguyên tố là số nguyên tố mà khi bỏ một số tuỳ ý các chữ số bên phải của nó
thì phần còn lại vẫn tạo thành một số nguyên tố.
Ví dụ : 7331 là một số siêu nguyên tố có 4 chữ s ố vì 733, 73, 7 c ũng l à các s ố
nguyên tố.
Em hãy viết chương trình tìm các số siêu nguyên t ố có N ch ữ s ố (0 < N <10) v à số
lượng các số tìm được.
Dư liêu vao: cho trong File SIEUNT.INP chứa số N.
Kêt qua: ghi ra file SIEUNT.OUT gồm các dòng:
- Dòng 1: số lượng các số siêu nguyên tố có N chữ số.
- Dòng tiếp theo liệt kê các số siêu nguyên tố tìm được.
Ví dụ :
4

SIEUNT.INP

SIEUNT.OUT
16
2333 2339 2393
2399 2939 3119
3137 3733 3739
3793 3797 5939
7193 7331 7333
7393
----------HẾT----------

Họ và tên thí sinh:......................................................Số báo danh:..................................
Giám thị 1:..................................................................Ký tên:..........................................
Giám thị 2:..................................................................Ký tên:..........................................


17


CHƯƠNG TRÌNH MẪU
BÀI 1:
Program Phan_tu_yen_ngua;
uses crt;
const
MaxLongInt = 2147483647;
var Min, Max: array[1..5000] of LongInt;
m, n: Integer;
procedure nhapmang;
var i, j, k: Integer;
begin
Write(‘Cho biet so cot: ‘);readln(n);
Write(‘Cho biet so dong: ‘);readln(m);
For i:=1 to n do
For j:=1 to m do
BEGIN
Write(‘a[‘,I,’]: ‘);Readln(A[i,j]);
END;
for i := 1 to n do Min[i] := MaxLongInt;
for j := 1 to m do Max[j] := -MaxLongInt;
for i := 1 to n do
begin
for j := 1 to m do
begin
if Min[i] > a[i,j] then Min[i] := a[i,j];
if Max[j] < a[i,j] then Max[j] := a[i,j];
end;

end;
end;
procedure Xuatmang;
var i,j:Integer;
kt:Boolean;
begin
kt:= False;
Writeln('Cac phan tu yen ngua la: ');
for i := 1 to n do
for j := 1 to m do
if Min[i] = Max[j] then
begin
kt:= True;
Write( '(', i, ',', j, '); ');
end;

18


if not kt then
begin
Write( 'Khong co phan tu yen ngua');
end;
end;
begin {Chuong trinh chinh}
clrscr;
nhapmang;
xuatmang;
writeln('Da xu ly xong');
readln;

end.

Bài 2:
uses crt;
var j,i,m,a,b,t:longint;
{----------------------}
Function kt(n:longint):boolean;
var i,d:integer;
begin
kt:=false;
d:=0;
For i:=1 to n do
if n mod i=0 then inc(d);
if d=2 then kt:=true;
end;
{----------------------}
begin
clrscr;
Write('Nhap m= ');readln(m);
a:=0;
b:=1;
Repeat
a:=a+b;
b:=a+b;
Until (a>=m) and (b>=m);
if aRepeat
a:=a-b;
b:=b-a;
Until ( (kt(a)) and (a

If a>b then writeln(a);
if b>a then writeln(b);
readln
end.
BÀI 3:
program So_Sieu_Nguyen_To;
uses crt;
const
var a,b: array [1..100] of longint;
N,i,k,ka,kb,cs: byte;

19


Function ktnt(N:longint):boolean;
Var j:longint;
Begin
Ktnt:=false;
If n<2 then exit;
For j:=2 to trunc(sqrt(n)) do
If n mod j = 0 then exit;
ktnt:=true;
End;
BEGIN {Chuong trinh chinh}
clrscr;
Write(‘Nhap vao mot so: ‘);readln(n);
For i:=1 to n do
BEGIN
Write(‘a[‘,I,’]: ‘);Readln(A[i,j]);
END;

ka:=1;
a[ka]:=0;
For i:=1 to N do
Begin
Kb:=0;
For k:=1 to ka do
For cs:=0 to 9 do
If ktnt(a[k]*10+cs) then
Begin
kb:=kb+1;
b[kb]:=a[k]*10+cs;
end;
ka:=kb;
For k:=1 to ka do
a[k]:=b[k];
end;
For k:=1 to ka do Write(a[k]:10);
Writeln;
Writeln('Co tat ca ',ka,' so sieu nguyen to co ',N,' chu so.');
Readln;
END.

HỘI THI TIN HỌC TRẺKC
NĂM 2012

ĐỀTHI PHÂN THƯC HÀNH
BẢNG B - THCS
20



Thời gian làm bài: 120 phút
Ngay thi: 30-03-2012
YÊU CÂU CHUNG:
- Nếu thí sinh không sử dụng tệp dữ liệu vào ra, có thể nhập dữ li ệu t ừ b àn
phím và xuất kết quả ra màn hình.
- Tạo thư mục với tên theo quy định C2_SBD trong ổ D:\ (trong đó SBD là s ố
báo danh của thí sinh). Các bài làm của thí sinh phải lưu trong thư mục này.
- Sử dụng ngôn ngữ lập trình Turbo Pascal hoặc Free Pascal để vi ết ch ương
trình. Đặt tên các bài làm và tên tệp dữ liệu theo quy định trong bảng sau:
Stt
Bài
Quy định đặt tên
Quy định tên tệp
Quy định tên tệp
tệp chương trình
dữ liệu vào
dữ liệu ra
1
Bài 1
Bai1.Pas
Nhập từ bàn phím Xuất ra màn hình
2
Bài 2
Bai2.Pas
Nhập từ bàn phím Xuất ra màn hình
3
Bài 3
Bai3.Pas
Nhập từ bàn phím Xuất ra màn hình
Bài 1: (3 điểm)

Nhập vào một số nguyên dương N từ bàn phím (N<= 1000). In ra màn hình
các thông tin sau:
- Tổng các ước tự nhiên của N
- Tích các chữ số của N. Giới hạn: 1 giây
Bài 2: (3 điểm)
Nhập từ bàn phím số nguyên dương N (N<=30). Hãy in ra màn hình số fibonacci thứ
N.
Bài 3: (4 điểm)
Viết chương trình tìm tất cả các số nguyên tố nhỏ hơn hoặc bằng số n cho trước
(n<=1000000). Tìm số lượng các số nguyên tố tìm được trong khoảng từ 1 đến n.
Yêu cầu:
− Dòng thứ nhất gồm các số nguyên tố tìm được ngăn cách bởi dấu cách
− Dòng thứ 2 là số lượng các số nguyên tố tìm được ngăn cách bởi dấu cách
Ví dụ: Nhập n = 10
Xuất 2 3 5 7
4

Bài 1:

program bl1;

21


uses crt;
var n,i,s:integer;
begin
clrscr;
write('Moi nhap n='); readln(n);
s:=0;

for i:=1 to n do
if n mod i=0 then s:=s+i;
writeln('Tong cac uoc tu nhien cua',n,'=',s);
writeln('Tich cac chu so cua ',n,'=');
s:=1;
while n>0 do
begin
s:=s*(n mod 10);
n:=n div 10;
end;
write(s);
readln;
end.
Bài 2:
program bl2;
uses crt;
var a,b:int64;
i,n:byte;
begin
clrscr;
write('Moi nhap n='); readln(n);
i:=2;
a:=1;
b:=1;
while ibegin
inc(i);
if i mod 2=1 then a:=a+b
else b:=b+a;
end;

if i mod 2=1 then write(a)
else write(b);
readln;
end.
Bài 3:
program phantich_snt;
uses crt;
var i,n,dem:integer;
function ngto(n:integer):boolean;
var i:integer;
begin
ngto:=false;
if (n<2) then exit;

22


for i:=2 to trunc(sqrt(n)) do
if (n mod i=0) then exit;
ngto:=true;
end;
begin
clrscr;
write('nhap vao so n: ');readln(n);
for i:=2 to n do
if (ngto(i)) then
begin
write(' ',i);
dem:=dem+1;
end;

writeln;
write(' ',dem);
readln;
end.

23