Cho file BAI1.INP mỗi dòng chứa một xâu ký tự.. 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
Trang 1Trang 1
SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI LẬP ĐỘI TUYỂN DỰ THI QUỐC GIA TỈNH ĐẮK LẮK NĂM HỌC 2013 - 2014
ĐỀ CHÍNH THỨC MÔN: TIN HỌC
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 File bài làm Dữ liệu vào Kết quả
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ụ
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 2Trang 2
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
8 1 0
2 7 4 4
4 5 2 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<100)
- 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ụ:
5 30
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
- 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 3Trang 1
SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI LẬP ĐỘI TUYỂN DỰ THI QUỐC GIA TỈNH ĐẮK LẮK 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 4Trang 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 5Trang 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 6Trang 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
Trang 7Trang 1
SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI LẬP ĐỘI TUYỂN DỰ THI QUỐC GIA TỈNH ĐẮK LẮK NĂM HỌC 2013 - 2014
ĐỀ CHÍNH THỨC MÔN: TIN HỌC
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 1: - Biến đổi xâu BAI1.PAS BAI1.INP BAI1.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ự:
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í
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ụ:
5
b
b
b
b
a
b
b
a
c
4
4 4 5
5 1 2
5 1 2
6 1 2
Trang 8Trang 2
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ụ:
4
7 8
5 6
4 3
9 4
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 9Trang 1
SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI LẬP ĐỘI TUYỂN DỰ THI QUỐC GIA TỈNH ĐẮK LẮK 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 có 5 trang) Ngày thi: 25/10/2013
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);
Trang 10Trang 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 11Trang 3
var i,j,mid: integer;
begin
mid:=a[(k+l) div 2];
i:=k; j:=l;
repeat
while a[i]<mid do inc(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 i<l then SortA(i,l);
end;
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]<mid do dec(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 i<l then SortB(i,l);
end;
procedure SapXepB;
var i: integer;
begin
for i:=1 to N do csB[i]:=i;
SortB(1,n);
end;
Trang 12Trang 4
function TimA(r: integer): integer;
var i: integer;
begin
for i:=n downto 1 do
if (dd[csA[i]]=0) and (a[i]<r) then
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 13Trang 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