gBâ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
KAPREKA.INP KAPREKA.OUT 10 4 6174 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,
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: SOLAP.INP | SOLAP.OUT 10 41 -1-111113101010 | 310 510 i 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_ _]
11000 00101 |
—————— 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
Trang 3
SỞ 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 đ)
+ Biến đầy đủ, hợp lý :— 025đ
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đ + Nhập được số Z :— (284
+ Kiểm tra điều kiện nhập N :— 080đ
Giải thuật tìm số đúng yêu cầu bài toán : (2.00đ)
+ Sinh số ngẫu nhiên :— 0,80đ
+ Giải thuật tốt 0.754
+ Tìm đúng số gần nhất 0.754
Phần kết xuất : (0.504)
+ Kết xuất câu thông báo đúng yêu cầu : 0238
+ Kết xuất đẹp :— 028đ
BÀI 2: (4 điểm)
Cấu trúc dùng chung : (0.50 đ)
+ Biến đầy đủ, hợp lý : 9258
+ 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đ
+ thuật tốt 0.50đ
+ Tìm dúng số gần nhất 0.500
Phần kết xuất : (0.50đ)
+ Kết xuất đúng yêu cầu :— 0/284
+ Kết xuất đẹp :— 025đ
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;
Uses Crt;Const nMax = 20; Max
Type Mang] = Array [1 nMax] of Integer;
var a: Mangli n,i,vt: Bytes z, dz Integer; 100; Begin CLrSer; Repeat Writein;
Write(' Nhap vao so phan tu cua day n= ');
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;
Trang 5For 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;
Trang 6
Begin
ti= x[i] + (bl - x[k-i*l]) + €; if (t > bl) then begin t r= t - 1; end else h
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
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
begin jd:=jd-alily afil end
else
begin a[i]:=a[i]-j3d+l; jd:=0; end;
to n do
4£ a[i]>max2 then max2: for i
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
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
begin jđ:=jd-a[4]; ali] end
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 Const fis'nhiphan.inp'; 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:
Trang 10
Ar=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
Trang 11Assign(£,£1);Reset(f);
Assign (g, fo) ¿ Rewrite (g) ;