Với Z, N 0< N nhập từ bàn phím còn các phần tử của dãy số được sinh ngẫu nhiên.. 'Viết chương trình thực hiện: với mỗi cặp giá trị B va K hay tìm một số Kapreka.. Dữ liệu ra: Ghi vào tập
Trang 1gBân chính
_ SỞ GD&ĐT KHANH HOA, KỲ THỊ CHỌN HỌC SINH GIỎI THCS
PHONG GD&DT DIÊN KHÁNH NĂM HỌC 2010-2011
Môn thi : TIN HQC - Lop 9
DE CHÍNH THỨC (hời gian : 150 phút — không kể thời gian phát dé)
Bai 1: (4 điểm)
Cho trước dãy số nguyên: ai, a, a3, ., av gdm N phan tir va mot sé nguyén bat ky Z 'Viết chương trình để chỉ ra một phần tử a; (1 < ¡< N) của dãy trén sao’ cho|a;-z|nhd
nhất Với Z, N (0< N) nhập từ bàn phím còn các phần tử của dãy số được sinh ngẫu nhiên Vidu: Choday: 5 -3 7 12 29
'Với Z = 8 thì chương trình kết xuất : 9 là phan tu gan Z nhat
'Với Z = -8 thì chương trình kết xuất : -3 là phan tu gan Z nhat
Bài 2: (4 điểm)
Số Kapreka mang tên nhà toán học Ấn Độ và được mô tả như sau: đó là số tự nhiên x viết trong hệ đếm Z có đúng K chữ số khác nhau đôi một và x = x""— x’, trong dé x’? vax’
lần lượt là các số thu được bằng cách sắp lại các chữ số của số x theo trật tự giảm và tăng
dần
'Viết chương trình thực hiện: với mỗi cặp giá trị B va K hay tìm một số Kapreka
Dữ liệu vào: trong tập tin văn bản KAPREKA.INP gồm 2 số Ö và K cách nhau bởi dấu cách (2 < 8 < 10, < B)
Dữ liệu ra: Ghi vào tập tỉn văn bản KAPREKA.OUT số Kapreka x tìm thấy trong
hệ đếm B Nếu không tìm thấy ghi sé 0
_ f dụ: Bộ dữ liệu dưới cho biết: Trong hệ đếm thập phân (# = 10, K = 4), x = 6174
là số Kapreka có 4 chữ số (khác nhau đôi mot), x''—x"= 7641 ~ 1467 = 6114 =x
Bài 3: (6 điểm)
Cho trước dãy số N số nguyên không giảm Ai, Az, Aa và 2 chỉ số ¿ và / Hãy tìm lặp lại nhiều nhất của các số trong day s6 Ay, Az,» An đồng thời cho biết giá trị của
lặp của một số (số có) là số nguyên dương và lớn hơn 1
Dữ liệu vào: từ tập tin văn bản SOLAP.INP có cấu trúc:
- Dòng đầu tiên chứa số nguyên N (1< N < 100);
- Dong thir hai chita day s6 Aj, Az, An (-10000 < A; < 10000 véi ¿e {1, N});
- Dòng thứ ba chứa 2 số ¿ và / (¡< j va 1S i,j SN);
~ Các số trên cùng một dòng cách nhau ít nhất một dấu cách
Dữ liêu ra: ghỉ vào tập tin SOLAP.OUT theo qui định:
- Dòng đầu tiên chứa số lần lặp lại nhiều nhất của các số trong dãy Ai, A2,
giá trị của số đó;
số là
An va
Trang 2„ - Dòng thứ hai chứa số lần lặp lại nhiều nhất của các
của số đó;
- Các số trên cùng một dòng cách nhau ít nhất một dấu cách
+ Nếu không có số nào được lặp, ghỉ -1 trong tập tin SOLAP.OUT
6 trong day A; ., Aj va gid trị
Vi du:
Bài 4: (6 điểm)
Cho một xâu nhị phân S có chiều dài N (1<_N < 200) gồm các ký tự 0 và 1 Lần lượt xoay vòng xâu, mỗi lẫn một ký tự theo chiều kim đồng hồ ta thu được
phân độ dài N kế cả xâu ban đầu Sắp xếp tăng dần các xâu đó theo thứ tự từ điển và xếp theo thứ tự đã sắp, mỗi xâu một hàng thành một bảng vuông N hàng N cột
Ví dụ:
Với xâu S = 10100, sau khi xoay và sắp ta thu được bảng sau:
00101
01001
01010
10010
10100
'Yêu cầu: Cho biết cột cuối cùng của bảng, hãy xác định dòng đầu tiên của bảng
Dữ liệu vào: Đọc từ một tệp văn bản NHIPHAN.INP gồm một dòng là 1 xâu nhị
phân là cột cuối cùng của bảng
Dữ liệu ra: Ghi vào tệp văn bản NHIPHAN.OUT một dòng là xâu nhị phân biểu thị dòng đầu của bảng
'Với ví dụ trên, đầu vào và đầu ra có thể như sau:
NHIPHAN.INE NHIPHAN.OUT_ _]
—————— HÉT Ghi chit :
- Các tập tin bài làm phải
BL4.PAS;
~ Đề thi có 02 trang;
- Giám thị không giải thích gì thêm
theo qui định BLI.PAS, BL2.PAS, BL3.PAS,
Trang 3SỞ GD&ĐT KHÁNH HÒA ĐÁP ÁN ĐÈ THỊ CHỌN HỌC SINH GIỎI THC PHÒNG GD&ĐT DIÊN KHÁNH NĂM HỌC 2010-2011
Môn thi: TIN HQC ~ Lớp 9 Thời gian: 130 phút (không kẻ thời gian phát đề)
DAP AN VA BIRU DIEM
h bày một cách giải, trong đáp án có bai gid duoe viét dudi dang các
ch khác (nếu đúng) và không viết chương trình dưới dạng các thủ tục vẫn e†
tục Học sinh giải
điểm tối đa
"Những bài làm của thí sinh có viết dưới dạng tha tục (ding) sẽ cho điểm thưởng 0.25 điể
cho mỗi bài Sau là đáp án và biểu cho điểm của c‹
A- BIỂU ĐIÊM
BÀI 1: (4 điểm)
Cấu trúc dùng chung : (.50 đ)
Chương trình viết dưới dạng chương trình con :— 025đ
Nhập số và kiểm tra : (1.008)
+ Nhập được số N : 028đ
Giải thuật tìm số đúng yêu cầu bài toán : (2.00đ)
Phần kết xuất : (0.504)
BÀI 2: (4 điểm)
Cấu trúc dùng chung : (0.50 đ)
+ Chương trình viết dưới dạng chương trình con : 028đ
Giải thuật tìm số đúng yêu cầu bài toán : (2.004)
+ Đọc dữ liệu đúng 0.50đ + Ghi dor ligu đúng, 0.50đ
Phần kết xuất : (0.50đ)
BÀI 3: (6 điểm)
Cấu trúc dùng chung : (1.00 đ)
+ Biển đầy đủ, hợp lý 0.50đ + Chương t đưới dạng chương trình con ; 080đ
Giải thuật tìm số đúng yêu cầu bài toán : (4.004)
Trang 4
+ Dọc dữ liệu đúng, + Ghi dữ liệu đúng
+ Giải thuật tốt + Tính được các dãy số nhị phân + Phân tích và tìm được dãy nhị phân đầu tiên
+ Kết xuất ra file đúng + Kết xuất đẹp
BÀI 4: (6 điểm)
Cấu trúc dùng chung : (1.00 đ)
+ Biến đầy đủ, hợp lý + Chương trình viết dưới dạng chương trình con
Giải thuật tìm số đúng yêu cầu bài toán : (4.00đ)
+ Đọc dữ liệu đúng, + Ghi dữ liệu đúng, + Giải thuật tốt
+ Tính được các dãy số nhị phân
+ Phan tich và tìm được đãy nhị phân đầu tiên
Phần kết xuất : (1.00đ)
+ Kết xuất ra file đúng,
+ Kết xuất đẹp
B- CHƯƠNG TRÌNH MẪU
Program Bai_1;
Type Mang] = Array [1 nMax] of Integer;
n,i,vt: Bytes
z, dz Integer;
Begin
CLrSer;
Repeat Writein;
Readln (n)
If n<=0 then
Begin
Weitein(? n phai la so nguyen duong !");
Weiteln(’ Nhan phim bat ky de nhap lai !");
Readkey;
ClrScr;
End;
until n>0;
Writelnz
Randomize;
For i:=1 to n do a(1]:=Random(Max)=Random(Max) 7
For i:=1 to n do Write(a(1]:7);
writeln;
Write (‘Hay nhap vao so bat ky:
Readin(2) 7
d:=Abs (2-a(11)7
veil;
0.500
0.500 100đ 1,000
1.004
0.500 0.500
0.500 0.500
0.500 0.500 1.004 1.004 1.004 0.500
0.500
Trang 5
For i:=2 to n do
1£ d>Abs(a(i]~z) then
Begin
bs (z-ali]) +
End
Writeln('Phan tu cua day gan voi Z = ',2:4,' nhat lat
*,a[vE]:4);
Writeln;
Write(*Nhan phim bat ky de ket thuc !
Readkey ;
End
Program Bai_2;
Uses Crt
Const mn = 11; fn = ‘KAPREKA.INP'; gn = 'KAPREKA.OUT';
Type mbl = array[0 mn] of byte:
var x, y, a: mb
b, ky bl, v
integer;
b - he dem
k - so chu so
bl - chu so lon nhat trong he b, bl = b-1
v - bien kiem soat cho ham Next
f,g: text;
Procedure Doc;
Begin assign(f,fn); xeset(£); readln(f,b,k); close(f);
bl := bel; ( Chu so cao nhat trong he dem b }
End:
Function Next: Boolean;
var i: integer;
Begin
Next := false;
if (v = 0) then exit;
x[v) t= xtv) +1:
for i r= v +1 to k do x[i] re x[i-1] + 1
if (x[k] = bl) then v := v - 1 else v
Next i= true;
End,
Function Hieu: Boolean;
var i,c,t: integer;
Begin
fillchar(d, sizeof (d),0);
Hieu := false;
{ Ghi nhan cac xuat hien cua xi] }
for i := 1 to k do d(x[i]] = 17
c= 1; { ¢: so nho }
for i i= 1 to k do
al'yvt,']
Trang 6Begin
ti= x[i] + (bl - x[k-i*l]) + €;
if (t > bl) then
begin t r= t -
1; end
if (d(t] = 0) then exit; { t ko xuat hien trong x } yli] := ty d{t) := 0;
End;
Hieu i= true;
End;
Function Kapreka: Boolean;
var i: integer;
t: Booleans
Begin
Kapreka := true;
( Khoi tri x la to hop tang nho nhat }
(Kx[1 k] = (0,1, ,ke1) }
for i := 1 to k do x{i] := i-l;
if (x{k] = bl) then v : k
repeat
if (Hieu) then exit;
until not next;
Kapreka := false;
End;
Procedure Run;
var i: byte;
Begin
Docs
assign(g,gn); rewrite(g);
if (Kapreka) then
for i := k downto 1 do write(g,y(il)
else write(g,0);
writeln(g); close(g);
End;
BEGIN
Run;
END
Program Bai_3;
Const
fi='Solap.inp';
fo='Solap.out';
var
£:texi
n, id, jd,max1,max2: integer;
a:array [1 100] of bytes
{ Program Solap;
const
f
f
var
Solap.inp';
Solap.out';
£:tex
nụ id, jd,max1, max2: integerz
Trang 7a:array [1 100] of byte;
re
procedure readfile;
var izinteger;
begin
assign (£, £4);
reset (£);
readin(f,n);
procedure XuLy;
var i,j,x,y,k:integer;
begin
fillchar (a, sizeof (a), 0);
diel;
max1
max2
xead (£,X) ¡
150;
if n=1 then
begin k:=1; a(1]:=1; end
else
while i<n do
begin
bnH dine (4) xead (£, y) while (y=x) and (isn) do begin inc(j); read(f,y); ine (i)
end;
if isn then
if y=x then inc(j) else begin a[k+2]:
xieyi ine (k)z a[k]:=4;
if a[k+1]=1 then inc(k);
end;
end;
read(f, id);
read(f, jd);
for i:=1 to k do
if a(i]>maxl then maxl for i:=1 to k do
if id<>0 then
if afi)<id then begin id:=id-a[i]; a[1]:=0;
else begin a[i]:=a(i]-id+l;
d+1;
downto 1 do
if jd<>0 then 1ƒ a(i]<jd then
(ile
for i
else begin a[i]:=a[i]-j3d+l; jd:=0; end;
to n do 4£ a[i]>max2 then max2:
for i
(ile
Trang 8close(f);
end,
os
procedure WriteFile;
begin
assign (£, £0);
rewrite (f);
writeln(f,max1);
writeln(£,max2) 7
close (£);
readfile;
xuly;
WriteFile;
end.)
procedure readfile;
var i:integer;
begin
assign(£, fi) +
reset (f);
readin(f,n);
procedure XuLy;
var 4,),x,y,k:integer;
begin
fillchar(a, sizeof (a) ,0);
irel;
max1:=0;
max2:=0;
read(f,x);
ki=0;
4£ n=1 then
begin k:=1; af1]:=1; end
else
while icn do begin
jielr Ane (i) + xead (#, y) while (yx) and (i<a) do begin inc(3); read(f,y); inc (i) end;
4£ i=n then 1f y=x then inc(j) else begin a(k+2]:=1; end;
xi=V/
ảne (k);
a[k]:=4;
if a(k+1]=1 then inc(K);
end;
read(f,id);
xead (£, 3đ)
for i:=1 to k do
4£ a[i]>maxl then max1:=a[i];
Trang 9for ir=1 to k do
if id<>0 then
if a(i}<id then begin id:=id-a[i]; a[4]:=0;
else begin a{i):=a[i]-idtl: end;
if jd<>0 then 4£ a[4]<jd then
else begin a[i]:=a(1)~-jđ+1; 3d for i:=1 to n do
4ƒ a[i]>max2 then max2:=a[i];
close (£);
end;
iS
procedure WriEeFile; begin
assign(£, £0);
rewrite (f);
writeln(£,max1);
writeln(£,max2);
close(£) ;
readfile;
xuly;
WriteFile;
end
Program Bai_4
fo='nhiphan out!
Var s,w:string;CS:array(0 255] of integer;
d,n, i:integer;
f,g:text
iS
Function Truoc(i:integer):
Begin
if isn then Truoc:
else Truo:
integer;
Function Sosanh(i,j:integer) : Integer;
Var k:integer;
Begin
For k:=1 to n do
Begin if s[i]<>s(j] then
Begin if s[il<s[j] then Sosanh:
else Sosanh: exit:
End;
Trang 10Ar=Truoc (i);
End;
Sosanh
End;
Procedure Saplaicot;
var x,i,j,krinteger;
Begin
For i: to n do CS[i]:
For i:=2 Begin to n do
xi=CS[1];k ;
For j:=i-1 downto 1 do
Begin
4£ (w(CS[3]]<=w[x]) Then
Begin ki +1; break end;
c8[5+1] :=CS [5]
End;
CS[k}
End;
End;
a
Procedure BackTracking;
Var itinteger;
Begin
nislength(w) 7
Saplaicot;
For i:=1 to n do
Af (CS(i]<>i) Then Begin d:=i;break end;
For i:=1 to n do
Begin d:=CS[d];
=s+w[d];Bnd;
var i,J,tg,min:integer;
xau:String;
Begin
For i:=2 to n do
4£ Sosanh(C§(1],CS (min) }
while i<=n do
Begin
xâu:=xau+s [min]
Procedure Work;
Var f,g:Text;
Begin
Trang 11Assign(£,£1);Reset(f);
Assign (g, fo) ¿ Rewrite (g) ;
Readìn (£,w);
BackTrackin
Tims
writeln(g,s);
Close(f);
Close(g);
End; fae
BEGIN
Work;
END