Tải bản đầy đủ (.pdf) (13 trang)

Đề thi lập đội tuyển dự thi quốc gia tỉnh đắc lắc năm học 2013 2014

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 (527.38 KB, 13 trang )

SỞ GIÁO DỤC VÀ ĐÀO TẠO
TỈNH ĐẮK LẮK
ĐỀ CHÍNH THỨC
(Đề thi gồm 02 trang)

KỲ THI LẬP ĐỘI TUYỂN DỰ THI QUỐC GIA
NĂM HỌC 2013 - 2014

MÔN: TIN HỌC
(Thời gian làm bài 180 phút, không kể giao đề)
Ngày thi: 24/10/2013

Đề thi này gồm 02 trang (Thời gian làm bài 180 phút, không kể thời gian giao đề)

Bài
Bài 1 - Từ đối xứng
Bài 2 - Biểu thức zero
Bài 3 - Tam giác số

File bài làm
BAI1.PAS
BAI2.PAS
BAI3.PAS

Dữ liệu vào
BAI1.INP
BAI2.INP
BAI3.INP

Kết quả
BAI1.OUT


BAI2.OUT
BAI3.OUT

Bài 1(6 điểm) - Từ đối xứng
Hai từ được gọi là đối xứng nếu từ này là từ đảo ngược của từ kia. Cho file BAI1.INP
mỗi dòng chứa một xâu ký tự. Hãy in ra số từ phân biệt có từ đối xứng ở trong mỗi
dòng. Kết quả in ra file BAI1.OUT, mỗi dòng ghi số từ phân biệt có từ đối xứng. Nếu
không có ghi kết quả là số 0.
Ví dụ:
BAI1.INP
BAI1.OUT
a
0
ab ab cd ba cd ba dc dc
2
tom la mot loai dong vat
1
Bài 2(7 điểm) - Biểu thức zero.
Cho một số tự nhiên N ≤ 9. Dãy số được tạo thành gồm các chữ số từ 1 đến N theo thứ
tự đó. Hãy điền vào các dấu + , - , hoặc là không điền dấu nào cả để tạo thành biểu
thức có kết quả thu được bằng 0. Hãy viết chương trình tìm tất cả các khả năng có thể.
Dữ liệu vào: Lấy từ file văn bản BAI2.INP với một dòng ghi số N.
Dữ liệu ra: Ghi vào file văn bản có tên BAI2.OUT có cấu trúc như sau:
- Dòng đầu ghi số lượng kết quả tìm được.
- Các dòng sau mỗi dòng ghi một kết quả tìm được.
Ví dụ
BAI2.INP
BAI2.OUT
7


6
1-2-3-4-5+6+7 = 0
1-2+3+4-5+6-7 = 0
1-23-45+67 = 0
1-23+4+5+6+7 = 0
1+2-3-4+5+6-7 = 0
1+2-3+4-5-6+7 = 0

Trang 1


Bài 3( 7 điểm) - Tam giác số
Hình sau mô tả một tam giác số có số hàng N=5:
7
3
8
2
4

8
1

7
5

0
4

2


4
6

5

Đi từ đỉnh (số 7) đến đáy tam giác bằng một đường gấp khúc, mỗi bước chỉ được đi từ
số ở hàng trên xuống một trong hai số đứng kề bên phải hay bên trái ở hàng dưới, và
cộng các số trên đường đi lại ta được một tổng.
Ví dụ: đường đi 7 8 1 4 6 có tổng là S=26, đường đi 7 3 1 7 5 có tổng là S=23
Trong hình trên, tổng Smax=30 theo đường đi 7 3 8 7 5 là tổng lớn nhất trong tất cả
các tổng.
Nhiệm vụ của bạn là viết chương trình nhận dữ liệu vào là một tam giác số chứa trong
text file BAI3.INP và đưa ra kết quả là giá trị của tổng Smax.
Dữ liệu: cho trong file văn bản BAI3.INP:
- Dòng thứ 1: có duy nhất 1 số N là số hàng của tam giác số (0- N dòng tiếp theo, từ dòng thứ 2 đến dòng thứ N+1: dòng thứ i có (i-1) số cách nhau
bởi dấu trống (space).
Kết quả: Ghi ra file văn bản BAI3.OUT.
Ví dụ:
BAI3.INP
BAI3.OUT
5
30
7
38
810
2744
45265
------- Hết ------- Thí sinh không được sử dụng tài liệu.
 Giám thị không giải thích gì thêm.

Họ và tên thí sinh……………………............……………… Số báo danh………....

Trang 2


Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO
TỈNH ĐẮK LẮK

KỲ THI LẬP ĐỘI TUYỂN DỰ THI QUỐC GIA
NĂM HỌC 2013 - 2014

HƯỚNG DẪN CHẤM

MÔN: TIN HỌC

(Hướng dẫn chấm gồm 4 trang)

Ngày thi: 24/10/2013

I. Phần chương trình nguồn
BÀI 1 –TỪ ĐỐI XỨNG
var f,g:text;st:string;
Function tudao(st:string):string;
Var i:integer;st1:string;
Begin
st1:='';
For i:=length(st) downto 1 do
st1:=st1+st[i];

tudao:=st1;
End;
Function demtudx(st:string):integer;
Var dem:integer;tu,tu1:string;
Begin
dem:=0;
st:=st+' ';
While length(st)>1 do
Begin
While st[1]=' ' do
delete(st,1,1);
tu:=copy(st,1,pos(' ',st));
if st<>'' then
st:=' '+st;
tu:=' '+tu;
While pos(tu,st)>0 do
delete(st,pos(tu,st),length(tu)-1);
tu1:=tudao(tu);
If (pos(tu1,st)>0) and (st[pos(tu1,st)+length(tu1)-1]=' ') then
inc(dem);
demtudx:=dem;
End;
end;
procedure xuly;
Var st:string;
Begin
Assign(f,'bai1.inp');
Reset(f);
Assign(g,'bai1.out');
Rewrite(g);

While not eof(f) do
Begin
Readln(f,st);
Writeln(g,demtudx(st));
End;


Trang 2

Close(f);
Close(g);
End;
Begin
xuly;
End.
BÀI 2 – Biểu thức zero
Program Zero_sum;
Type MangStr = array[1..15] of string;
Const Fi ='BAI2.INP';
Fo ='BAI2.OUT';
Dau : array[1..3] of string[1] = ('-','+','');
S : array[1..9] of char =('1','2','3','4','5','6','7','8','9');
ChuSo = ['1'..'9'];
Var N,k,dem: byte;
D : array[2..9] of string[1];
F : Text;
St : String;
M : MangStr;
Procedure Write_out;
Var i : byte;

Begin
Assign(F,Fo); Rewrite(F);
Writeln(F,dem);
For i:= 1 to dem do writeln(F,M[i],' = 0');
Close(F); Halt;
End;
Procedure Read_inp;
Begin
Assign(F,Fi); Reset(F);
Read(F,N); Close(F);
If N < 3 then write_out;
End;
Function DocSo(S : String): longint;
Var M : longint;
t : byte;
Begin
M:= 0; t:= 0;
If S[k] in ['+','-'] then
begin
t:= k; Inc(k);
end;
While (k<= length(S)) and (s[k] in ChuSo) do
begin
m:= m*10 + ord(s[k]) - ord('0');
Inc(k);
end;


Trang 3


If (t <> 0) and (S[t] = '-') then DocSo:= -M
else DocSo:= M;
End;
Procedure Test;
Var St : string;
i : byte;
T : longint;
Begin
St:= '1'; k:= 1; T:= 0;
For i:= 2 to N do St:= St + D[i] + S[i];
While k < length(St) + 1 do T:= T + DocSo(St);
If T = 0 then
begin
Inc(dem); M[dem]:= St;
end;
End;
Procedure Try(i: byte);
Var j : byte;
Begin
For j:= 1 to 3 do
begin
D[i]:= Dau[j];
If i = N then Test else try(i+1);
end;
End;
BEGIN
Read_inp;
Try(2);
Write_out;
END.

BÀI 3 – TAM GIÁC SỐ
{ QUY HOẠCH ĐỘNG}
Program bai3;
Uses crt;
Type mang = array[1..100,1..100] of integer;
Var
f:text;
i,j,n:integer;
a,b:mang;
Procedure Input;
Begin
clrscr;
Assign(f,'bai3.inp');
reset(f);
readln(f,n);
for j:=1 to n do
begin
for i:=2 to j+1 do
read(f,a[j,i]);
end;


Trang 4

close(f);
end;
{----------------------------------}
Function Max(m,n:integer):integer;
Begin
if n>m then Max:=n

else Max:=m;
end;
{----------------------------------}
Procedure MakeArrayOfQHD;
Begin
b[1,2]:=a[1,2];
for j:=1 to n do b[j,1]:=-maxint;
for i:=3 to n do b[1,i]:=-maxint;
for j:=2 to n do
begin
for i:=2 to j+1 do
b[j,i]:=a[j,i]+max(b[j-1,i],b[j-1,i-1]);
end;
end;
{-----------------------------------}
Procedure FindMax;
var max:integer;
Begin
max:=b[n,1];
for i:=2 to n do
if b[n,i]>max then max:=b[n,i];
assign(f,'bai3.out');rewrite(f);
write(f,max);
close(f);
end;
{------------------------------------}
BEGIN
Input;
makearrayofQHD;
FindMax;

END.

II. Hướng dẫn chấm.
Bài 1: 3 Test, mỗi test đúng cho 2 điểm.
Bài 2: 3 Test, mỗi test đúng cho 2 điểm + 1 điểm test mẫu ví dụ.
Bài 3: 3 Test, mỗi test đúng cho 2 điểm + 1 điểm test mẫu ví dụ
Chú ý: Kết quả có thể có nhiều phương án khác nhau do đó yêu cầu giám khảo xem xét kỹ
khi chấm bài.
---- Hết ----


SỞ GIÁO DỤC VÀ ĐÀO TẠO
TỈNH ĐẮK LẮK
ĐỀ CHÍNH THỨC
(Đề thi gồm 02 trang)

KỲ THI LẬP ĐỘI TUYỂN DỰ THI QUỐC GIA
NĂM HỌC 2013 - 2014

MÔN: TIN HỌC
(Thời gian làm bài 180 phút, không kể giao đề)
Ngày thi: 25/10/2013

Đề thi này gồm 02 trang (Thời gian làm bài 180 phút, không kể thời gian giao đề)

Bài
Bài 1: - Biến đổi xâu
Bài 2: - Đội cờ

File bài làm

BAI1.PAS
BAI2.PAS

Dữ liệu vào
BAI1.INP
BAI2.INP

Kết quả
BAI1.OUT
BAI2.OUT

Bài 1(10 điểm) - Biến đổi xâu.
Cho xâu kí tự U = u1u2…un , trong đó ui  {a,b,c} = X (i=1,2,…,n). Các phép biến
đổi sau đây (đánh số thứ tự từ 1 đến 9) cho phép thay thế hai kí tự liên tiếp nhau trong
xâu đã cho bởi một kí tự:
1) aa  x1
2) ab  x2
3) ac  x3
4) ba  x4
5) bb  x5
6) bc  x6
7) ca  x7
8) cb  x8
9) cc  x9
Trong đó xi  X, i=1,2,...,9.
Cần tìm cách áp dụng lần lượt các phép toán biến đổi đã có để chuyển xâu U về một kí
tự định trước w  X.
Dữ liệu vào: cho trong file văn bản BAI1.INP:
- Dòng đầu ghi số n.
- N dòng tiếp theo mỗi dòng chứa một kí tự của xâu U theo thứ tự từ u1 đến un .

- Dòng thứ i trong số 9 dòng tiếp theo chứa chữ cái xi , i=1,2,...,9.
- Dòng cuối cùng chứa chữ cái w.
Kết quả tìm được ghi ra file văn bản BAI1.OUT theo quy cách sau:
- Dòng đầu tiên ghi số lượng phép biến đổi M cần áp dụng để chuyển xâu U
thành chữ cái w, dòng này ghi số 0 nếu không tìm được phép biến đổi như vậy.
- Nếu có thể biến đổi xâu đã cho về một kí tự thì dòng thứ i trong số M dòng
tiếp theo ghi số thứ tự của phép biến đổi cần sử dụng và các chỉ số của hai kí tự
liên tiếp nhau trong xâu đang biến đổi cần thay thế bằng một kí tự.
Ví dụ:
BAI1.INP
5
b
b
b
b
a
b
b
a
c

BAI1.OUT
4
4 4 5
5 1 2
5 1 2
6 1 2

Trang 1



b
a
a
c
c
a
Dãy biến đổi có thể mô tả trong sơ đồ sau: (w = a)
bbbba (4)  bbbc (5)  bbc (5)  bc (6)  a
Bài 2(10 điểm) - Đội cờ .
Có hai đội cờ vua A và B thi đấu với nhau. Mỗi đội cờ cử ra n kỳ thủ, mỗi kỳ thủ
của đội B chỉ đấu một trận và chỉ đấu với một kỳ thủ của đội A và ngược lại. Vậy có
tất cả n trận đấu. Đội nào thắng được 2 điểm, hoà được 1 điểm và thua được 0 điểm.
Cho đội B được quyền chọn cặp thi đấu.
Yêu cầu:
Lập trình để đội B chọn được các cặp thi đấu sao cho tổng số điểm của đội B là cao
nhất, cho biết trình độ của cầu thủ thứ i của đội A và B lần lượt là a[i] và b[i]
(i=1,2,…,n) và giả sử trong thi đấu, hai kỳ thủ có trình độ ngang nhau sẽ hoà và kỳ thủ
nào có trình độ cao hơn sẽ thắng.
Dữ liệu:
Ghi trên file văn bản BAI2.INP gồm n+1 dòng:
 Dòng đầu tiên ghi số nguyên dương n, 1≤n≤1000
 Dòng thứ i+1 ghi 2 số nguyên a[i], b[i] (1≤a[i], b[i]≤100) cách nhau ít nhất một
khoảng trắng.
Kết quả:
Ghi ra file văn bản BAI2.OUT gồm n+1 dòng
 Dòng đầu ghi số nguyên T là tổng số điểm cao nhất mà đội B có thể đạt được.
 Dòng thứ i+1 (1≤i≤n) ghi số nguyên dương x[i] (1≤x[i]≤n) với x[i] là số thứ tự
của kỳ thủ đội B phải thi đấu với kỳ thủ thứ i của đội A để tổng số điểm của đội
B đạt được là T

Ví dụ:
BAI2.INP
4
7 8
5 6
4 3
9 4

BAI2.OUT
5
1
2
4
3
------- Hết --------

 Thí sinh không được sử dụng tài liệu.
 Giám thị không giải thích gì thêm.
Họ và tên thí sinh……………………............……………… Số báo danh………....
Trang 2


Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO
TỈNH ĐẮK LẮK

KỲ THI LẬP ĐỘI TUYỂN DỰ THI QUỐC GIA
NĂM HỌC 2013 - 2014


HƯỚNG DẪN CHẤM
(Hướng dẫn chấm gồm có 5 trang)
I. Phần chương trình nguồn
Bài 1:
program biendoixau;
{$B-,Q+,R+} {$M 65500,0,655360}
const
maxN = 20;
fi = 'BAI1.INP' ; fo = 'BAI1.OUT';
bd: array[1..9] of string[2]= ('aa','ab','ac','ba','bb',
'bc','ca','cb','cc');
type
sN= string[maxN]; s9= string[9];
mang= array[1..maxN] of byte;
var
a, vt: mang; m,n: byte;
u: sN; x: s9; w: char; f: text;
procedure khoitao;
var i:byte;
begin
assign(f,fi); reset(f);
readln(f,n);
u:= ''; x:= ''; m:= n-1;
for i:=1 to n do
begin
readln(f,w); u:=u+w;
end;
for i:=1 to 9 do
begin
readln(f,w); x:=x+w;

end;
read(f,w); close(f);
end;
procedure check;
var
t,i,kt: byte; s:sN;
begin
s:= u;
for i:=1 to m do
begin
t:= pos(bd[a[i]],s);
if t = 0 then exit;
vt[i]:= t; delete(s,t,2);
insert(x[a[i]],s,t);
end;
if pos(w,s) > 0 then
begin
writeln(f,m);

MÔN: TIN HỌC
Ngày thi: 25/10/2013


Trang 2

for i:= 1 to m do
writeln(f,a[i],' ',vt[i], ' ',vt[i]+1);
close(f);halt;
end;
end;

procedure tim(i:byte);
var j:byte;
begin
if i>m then check
else for j:=1 to 9 do
begin
a[i]:= j; tim(i+1);
end;
end;
procedure xuly;
begin
assign(f,fo); rewrite(f);
tim(1); write(f,0); close(f);
end;
BEGIN
khoitao; xuly;
END.
BÀI 2:
program doico;
const
tfi
= 'BAI2.INP';
tfo
= 'BAI2.OUT';
maxN
= 1000;
var
fi, fo
: text;
N

: integer;
dd,x,a,b,csA,csB : array[1..maxN] of integer;
DiemMax
: integer;
procedure Docdl;
var i: integer;
begin
assign(fi,tfi); reset(fi);
readln(fi,N);
for i:=1 to N do read(fi,a[i],b[i]);
close(fi);
end;
procedure Doi(var u,v: integer);
var w: integer;
begin
w:=u;
u:=v;
v:=w;
end;
procedure SortA(k,l: integer);


Trang 3

var i,j,mid: integer;
begin
mid:=a[(k+l) div 2];
i:=k; j:=l;
repeat
while a[i]

while a[j]>mid do dec(j);
if i<=j then
begin
Doi(a[i],a[j]);
Doi(csA[i],csA[j]);
inc(i);
dec(j);
end;
until i>j;
if j>k then SortA(k,j);
if iend;
procedure SapxepA;
var i: integer;
begin
for i:=1 to N do csA[i]:=i;
SortA(1,N);
end;
procedure SortB(k,l: integer);
var i,j,mid: integer;
begin
mid:=b[(k+l) div 2];
i:=k;
j:=l;
repeat
while b[i]>mid do inc(i);
while b[j]if i<=j then
begin
Doi(b[i],b[j]);

Doi(csB[i],csB[j]);
inc(i);
dec(j);
end;
until i>j;
if j>k then SortB(k,j);
if iend;
procedure SapXepB;
var i: integer;
begin
for i:=1 to N do csB[i]:=i;
SortB(1,n);
end;


Trang 4

function TimA(r: integer): integer;
var i: integer;
begin
for i:=n downto 1 do
if (dd[csA[i]]=0) and (a[i]begin
TimA:=i;
exit;
end;
for i:=n downto 1 do
if (dd[csA[i]]=0) and (a[i]=r) then
begin

TimA:=i;
exit;
end;
TimA:=0;
end;
procedure Ghep;
var j,limit,i,k: integer;
begin
fillchar(dd,sizeof(dd),0);
fillchar(x,sizeof(x),0);
i:=1;
DiemMax:=0;
limit:=n;
repeat
k:=TimA(b[i]);
if k>0 then
begin
x[csA[k]]:=csB[i];
dd[csA[k]]:=1;
if b[i]>a[k] then inc(DiemMax,2) else inc(DiemMax,1);
limit:=k-1;
inc(i);
end;
until k=0;
for j:=i to N do
begin
repeat inc(k) until dd[k]=0;
x[k]:=csB[j];
end;
end;

procedure inkq;
var i: integer;
begin
assign(fo,tfo); rewrite(fo);
writeln(fo,diemMax);
for i:=1 to N do writeln(fo,x[i]);
close(fo);
end;
BEGIN


Trang 5

Docdl;
SapXepA;
SapXepB;
Ghep;
Inkq;
END.

II. Hướng dẫn chấm.
Bài 1: 5 Test, mỗi test đúng cho 2 điểm
Bài 2: 5 Test, mỗi test đúng cho 2 điểm
Chú ý: Kết quả có thể có nhiều phương án khác nhau do đó yêu cầu giám khảo xem xét
kỹ khi chấm bài.
---- Hết ----




×