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

Đề thi chọn đội tuyển dự thi Quốc Gia THPT năm 2014 tỉnh Đăk Lăk môn tin

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 )

Trang 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
(Đề thi gồm 02 trang) (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 File bài làm Dữ liệu vào Kết quả
Bài 1 - Từ đối xứng BAI1.PAS BAI1.INP BAI1.OUT
Bài 2 - Biểu thức zero BAI2.PAS BAI2.INP BAI2.OUT
Bài 3 - Tam giác số BAI3.PAS BAI3.INP 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 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ụ:
BAI3.INP BAI3.OUT
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 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 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
Trang 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
(Đề thi gồm 02 trang) (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 File bài làm Dữ liệu vào Kết quả
Bài 1: - Biến đổi xâu

BAI1.PAS BAI1.INP BAI1.OUT
Bài 2: - Đội cờ
BAI2.PAS BAI2.INP BAI2.OUT

Bài 1(10 điểm) - Biến đổi xâu.
Cho xâu kí tự U = u
1
u
2
…u
n
, trong đó u
i


{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  x
1
2) ab  x
2
3) ac  x
3

4) ba  x
4
5) bb  x
5
6) bc  x

6

7) ca  x
7
8) cb  x
8
9) cc  x
9

Trong đó x
i


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ừ u
1
đến u
n
.
- Dòng thứ i trong số 9 dòng tiếp theo chứa chữ cái x
i
, 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 BAI1.OUT
5
b
b
b
b
a
b
b
a
c
4
4 4 5
5 1 2
5 1 2
6 1 2
Trang 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ụ:
BAI2.INP BAI2.OUT
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 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 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]<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 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 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

×