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

Đề thi và đáp án môn Tin học tỉnh Thanh Hoá kỳ thi chọn HSG năm học 2008 2009

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 (129.74 KB, 10 trang )

Sở Giáo dục và đào tạo
thanh hoá
CHNH THC
S bỏo danh
.

Kỳ thi học sinh giỏi tỉnh
Nm hc: 2008-2009
Mụn thi: Tin hc
Lp 12 THPT
Ngy thi: 28/03/2009
Thi gian: 180 phỳt (khụng k thi gian giao )
ny cú 05 cõu, gm 02 trang.

Tng quan bi thi:
Tờn bi
Bi 1 S nguyờn t
Bi 2 Trung bỡnh cng
Bi 3 Xõu i xng
Bi 4 Biu thc Zero
Bi 5 Min 0

File chng trỡnh File d liu vo
File kt qu
BAI1.PAS
BAI1.INP
BAI1.OUT
BAI2.PAS
BAI2.INP
BAI2.OUT
BAI3.PAS


BAI3.INP
BAI3.OUT
BAI4.PAS
BAI4.INP
BAI4.OUT
BAI5.PAS
BAI5.INP
BAI5.OUT
Gii hn thi gian cho mi test l 3 giõy.
D liu vo l ỳng n, khụng cn phi kim tra.
Hóy lp trỡnh gii cỏc bi toỏn sau:
Bi 1: (5 im) S nguyờn t
Cho dóy s gm cú N s nguyờn dng a1, a2,..., aN v mt s nguyờn dng K.
Yờu cu: Hóy cho bit s lng cỏc phn t cú giỏ tr nh hn K l s nguyờn t ca dóy s trờn.
D liu: Vo t File vn bn BAI1.INP gm:
Dũng u tiờn l hai s N v K.
Dũng tip theo ln lt l N s nguyờn ca dóy s.
Kt qu: Ghi ra File BAI1.OUT gm duy nht s M l s lng cỏc phn t ca dóy s tho
món yờu cu bi.
Gii hn: 0 < N < 50000; 0 < K, ai < 5000 i = 1..N;
Vớ d:

BAI1.INP
78
1 2 3 8 7 6 11

BAI1.OUT
3

Bi 2: (5 im) Trung bỡnh cng

Cho dóy gm n s nguyờn a1, a2,..., an v s nguyờn K.
Yờu cu: Cho bit trong dóy s ó cho cú tn ti hay khụng mt cp s m trung bỡnh cng ca
chỳng l K.
D liu: Vo t file vn bn BAI2.INP:
Dũng u tiờn ghi hai s n, K.
Dũng tip theo ln lt ghi n s a1, a2,..., an.
Cỏc s trờn cựng mt dũng c ghi cỏch nhau ớt nht mt du cỏch trng.
Kt qu: Ghi ra file vn bn BAI2.OUT:
S 1 nu tn ti mt cp s tho món yờu cu bi toỏn.
S 0 nu khụng tn ti cp s no tho món yờu cu bi toỏn.
Gii hn: 0 < N < 50000; |K|, |ai| < 1000 i = 1..n;
Vớ d:
BAI2.INP
BAI2.OUT
BAI2.INP
BAI2.OUT
1
0
45
33
0264
123
Trang 1/10


Bài 3: (4 điểm) Xâu đối xứng
Xâu đối xứng là xâu đọc giống nhau nếu ta bắt đầu đọc từ trái qua phải hoặc từ phải qua
trái. Ví dụ, xâu RADAR là xâu đối xứng, xâu TOMATO không phải là xâu đối xứng.
Yêu cầu: Cho một xâu S gồm không quá 200 kí tự. Cho biết S có phải là xâu đối xứng hay
không? Nếu không, cho biết số kí tự ít nhất cần thêm vào S để S trở thành xâu đối xứng.

Dữ liệu: Vào từ file văn bản BAI3.INP, gồm duy nhất 1 dòng ghi xâu S.
Kết quả: Ghi ra file văn bản BAI3.OUT, duy nhất số k là số kí tự ít nhất cần thêm vào S để S
trở thành xâu đối xứng. Nếu xâu S đã cho là đối xứng thì ghi k = 0.
Ví dụ:
BAI3.INP
BAI3.OUT
BAI3.INP
BAI3.OUT
RADAR

0

TOMATO

3

Bài 4: (3 điểm) Biểu thức Zero
Cuội viết liên tiếp các số tự nhiên từ 1 đến N thành dãy: 1 2 3 ... N. Cuội đố Bờm điền
các dấu phép toán + hoặc - vào giữa 2 số tự nhiên liên tiếp sao cho biểu thức thu được có kết
quả bằng 0.
Yêu cầu: Bạn hãy giúp Bờm viết chương trình liệt kê tất cả các cách điền dấu phép toán thích hợp.
Dữ liệu: Vào từ file văn bản BAI4.INP gồm 1 dòng duy nhất ghi số N. N<10
Kết quả: Ghi ra file văn bản có tên BAI4.OUT:
 Dòng đầu tiên ghi số M là số cách điền dấu vào biểu thức.
 M dòng tiếp theo, mỗi dòng ghi một kết quả tìm được.
Ví dụ:
BAI4.INP
BAI4.OUT
BAI4.INP
BAI4.OUT

2

0

3

1
1+2-3=0

Bài 5: (3 điểm ) Miền 0
Cho một hình chữ nhật gồm M hàng, N cột, được chia thành MxN ô vuông. Mỗi ô
vuông được ghi một trong hai số nguyên 0 hoặc 1.
Miền 0 là một miền liên tục các số 0 thuộc các ô chung cạnh với nhau. Diện tích miền là
số lượng các ô vuông cùng giá trị thuộc miền đó.
Yêu cầu: Tính diện tích miền 0 lớn nhất của hình chữ nhật đã cho.
Dữ liệu: Vào từ file văn bản BAI5.INP:
 Dòng đầu tiên ghi hai số M, N.
 M dòng tiếp theo, mỗi dòng ghi N số lần lượt là giá trị các ô trong bảng số.
Kết quả: Ghi ra file văn bản BAI5.OUT số nguyên duy nhất là diện tích miền 0 lớn nhất.
Giới hạn: 1 < M, N < 100.
Ví dụ:
BAI5.INP
BAI5.OUT
34
0001
1101
0010

4


Cán bộ coi thi không giải thích gì thêm.
----------------------------- Hết ----------------------------Trang 2/10


const fi='bai1.inp';
fo='bai1.out';
var n,k:word;
a:array[1..50000] of word;
f:text;
{=================================}
procedure Docdl;
var i:word;
begin
assign(f,fi);
reset(f);
readln(f,n,k);
for i:=1 to n do
read(f,a[i]);
close(f);
end;
{==================================}
function nto(x:word):boolean;
var i:word;
begin
if x=1 then
exit(false);
for i:=2 to trunc(sqrt(x)) do
if x mod i = 0 then
exit(false);
nto:=true;

end;
{==================================}
procedure count;
var d,i:word;
begin
d:=0;
for i:=1 to n do
if (a[i]inc(d);
assign(f,fo);
rewrite(f);
write(f,d);
close(f);
end;
{==================================}
BEGIN
Docdl;
Count;
END.

Trang 3/10


const fi='bai2.inp';
fo='bai2.out';
var n,d,k:longint;
a:array[1..50000] of longint;
f:text;
{=================================}
procedure Docdl;

var i:longint;
begin
assign(f,fi);
reset(f);
readln(f,n,k);
for i:=1 to n do
read(f,a[i]);
close(f);
end;
{=================================}
procedure count;
var i,j:longint;
begin
d:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]+a[j] = 2*k then
begin
inc(d);
exit;
end;
end;
{==================================}
BEGIN
Docdl;
Count;
assign(f,fo);
rewrite(f);
if d=0 then
write(f,0)

else
write(f,1);
close(f);
END.

Trang 4/10


const fi='bai3.inp';
fo='bai3.out';
var f:text;
s:string;
c:array[0..201,0..201] of byte;
{========================}
procedure Docdl;
begin
assign(f,fi);
reset(f);
readln(f,s);
close(f);
fillchar(c,sizeof(c),0);
end;
{=========================}
procedure QHD;
var n,i,j:byte;
begin
n:=length(s);
for j:=2 to n do
for i:=j-1 downto 1 do
if s[i]=s[j] then

c[i,j]:=c[i+1,j-1]
else
if c[i+1,j]>c[i,j-1] then
c[i,j]:=c[i,j-1]+1
else
c[i,j]:=c[i+1,j]+1;
assign(f,fo);
rewrite(f);
write(f,c[1,n]);
close(f);
end;
{=============================}
BEGIN
Docdl;
QHD;
END.

Trang 5/10


const fi='bai4.inp';
fo='bai4.out';
foo='bai4.txt';
var f,tep:text;
s:string;
m,n,dem:longint;
x,t:array[0..200] of longint;
{========================}
procedure docdl;
begin

assign(f,fi);
reset(f);
readln(f,n);
close(f);
dem:=0;
end;
{========================}
procedure Qlui(i:byte);
var j,k:byte;
begin
for j:=0 to 1 do
begin
x[i]:=j;
if x[i]=0 then
t[i]:=t[i-1]+i
else
t[i]:=t[i-1]-i;
if i=n then
begin
if t[n]=0 then
begin
write(f,1);
for k:=2 to n do
if x[k]<>0 then
write(f,'-',k)
else
write(f,'+',k);
writeln(f,'=0');
dem:=dem+1;
end;

end
else
Qlui(i+1);
end;
end;
{=====================}
BEGIN
Docdl;
assign(f,foo);
rewrite(f);
x[1]:=1;
t[1]:=1;
Qlui(2);
close(f);
assign(tep,fo);
rewrite(tep);
writeln(tep,dem);
reset(f);
while not eof(f) do
begin
readln(f,s);
writeln(tep,s);

Trang 6/10


end;
close(tep);
close(f);
END.


Trang 7/10


const fi='bai5.inp';
fo='bai5.out';
var f:text;
m,n:byte;
a:array[0..101,0..101] of byte;
max:word;
{======================}
procedure Docdl;
var i,j:byte;
begin
fillchar(a,sizeof(a),1);
assign(f,fi);
reset(f);
readln(f,m,n);
for i:=1 to m do
for j:=1 to n do
read(f,a[i,j]);
close(f);
end;
{======================}
function dem(x,y:byte):word;
begin
if a[x,y]=1 then
dem:=0
else
begin

a[x,y]:=1;
dem:=dem(x-1,y)+dem(x+1,y)+dem(x,y-1)+dem(x,y+1)+1;
end;
end;
{=======================}
procedure timmax;
var i,j:byte; tg:word;
begin
max:=0;
for i:=1 to m do
for j:=1 to n do
begin
tg:=dem(i,j);
if maxmax:=tg;
end;
assign(f,fo);
rewrite(f);
write(f,max);
close(f);
end;
{=======================}
BEGIN
Docdl;
timmax;
END.

Trang 8/10



Trang 9/10




Trang 10/10



×