Tải bản đầy đủ (.doc) (12 trang)

Đề thi học sinh giỏi lớp 12 môn tin học

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 (55.79 KB, 12 trang )

Sở GD - ĐT Quảng Bình
Đề thi học sinh giỏi lớp 12 năm học 2007 2008
Câu 1: Cho dãy số A1, A2,, An với (n<100, Ai là số nguyên và
1 < Ai <200 với i đi từ 1 đến n)
Hãy chọn ngẩu nhiên các phần tử của dãy thành hai nhóm sao
cho tổng các phần tử trong mỗi nhóm chênh lệch nhau ít nhất.
Yêu cầu:
Dữ liệu vào: Cho bởi file BAI1.INP trong đó
Dòng đầu tiên ghi số n
Dòng tiếp theo chứa giá trị các phần tử của dãy.
Dữ liệu ra đợc ghi vào file BAI1.OUT trong đó:
Dòng thứ nhất ghi: Câu Chenh lech: và giá trị chênh lệch
giữa hai nhóm.
Dòng thứ hai ghi: Nhom 1:
Dòng thứ ba ghi: các phần tử của nhóm 1
Dòng thứ t ghi: Nhom 2:
Dòng thứ năm ghi: các phần tử của nhóm 2
Ví dụ:
Dữ liệu vào
9
223456789

File đầu vào BAI1.INP
BAI2.OUT

chenh lech: 0
Nhom 1:
754322
nhom 2:
689
File đầu ra



Bài 2. Làm vờn.
Một mãnh vờn hình chử nhật đợc chia làm m hàng ngang và n
hàng dọc (n,m<=50). Trên mỗi ô vờn có một số ô đã đợc trồng cây
dài ngày không đợc trồng thêm, các ô còn lại sẽ đợc trồng bằng hai
loại cây ngắn ngày là Lạc và vừng. Hãy tìm cách trồng các cây
ngắn ngày vào các ô trống sao cho tổng các ô trồng lạc và vừng
trên mỗi hàng ngang và mỗi hàng dọc chênh lệch ít nhất
Yêu cầu:
Dữ liệu vào cho bởi file BAI2.INP trong đó
- Dòng thứ nhất chứa hai giá trị m và n
- Mỗi dòng trong m dòng tiếp theo chứa n số 0 hoặc 1. Số 0 chỉ
ô đã trồng cây dài ngày, số 1 chỉ ô cha trồng


Dữ liệu đa ra file có tên BAI2.OUT, gồm m dòng. Mỗi dòng có n
số nhận giá trị 0, 1 hoặc 2 trong đó
- Số 0 chỉ ô đã trồng cây dài ngày
- Số 1 chỉ ô trồng lạc
- Số 2 chỉ ô trồng vừng
Ví dụ:
5
1
0
1
1
1

6
1

1
0
0
0

0
1
0
1
0

1
0
1
0
1

1
1
1
1
1

0
1
1
0
1

1

0
2
1
2

1
2
0
0
0

0
1
0
2
0

2
0
1
0
1

1
2
1
2
1

0

1
2
0
1

File đầu vào BAI2.INP
File đầu ra
BAI2.OUT
Bài 3:
Cho một xâu bao gồm những chữ cái in hoa và các chữ số từ
09.
Viết chơng trình thực hiện các công việc sau:
Thực hiện tách xâu thành 2 xâu: xauchar và xaunum trong
đó xauchar là xâu gồm các chữ cái, xaunum là xâu gồm các chữ
số, đợc giữ nguyên thứ tự từ trái sang phải.
Thực hiện sắp xếp xâu xauchar theo thứ tự lớn dần(ABCD)
Tìm độ dài lớn nhất của một xâu con trong xâu xaunum có
các giá trị lập thành một cấp số cộng và đa xâu con đó ra (lu ý;
Nếu có nhiều xâu con lập thành một cấp số cộng có độ dài bằng
nhau thì đa xâu con tìm đợc đầu tiên từ trái sang phải)
Yêu cầu
Dữ liệu vào cho bởi tệp BAI3.INP
Dữ liệu đa ra tệp có tên BAI3.OUT trong đó
- Dòng thứ nhất ghi xâu xauchar đã sắp xếp
- Dòng thứ hai ghi độ dài lớn nhất của xâu con (trong xâu
xaunum) tạo thành cấp số cộng
- Dòng thứ ba ghi xâu con (trong xâu xaunum) lập thành cấp
số cộng
Ví dụ
JKSGFJKKL32123456789310KJKDJH

GF

DFFGGHJJJJKKKKKLS
9
123456789


File ®Çu vµo BAI3.INP
BAI3.OUT

File ®Çu ra


§¸p ¸n
Bµi 1
Program BAI1;
Const MaxN=100;
fi='bai1.inp';
fo='bai2.out' ;
Var A:Array[1..MaxN] of 0..200;
N1: array[1..MaxN] of 0..1;
V: array[1..2,0..20000] of 0..1;
N: Byte;
Max, j1,j2, clech: Longint;
Procedure Docfile;
Var i: Byte;
f: Text;
Begin
Assign(f,fi); reset(f);
Readln(f,n);

For i:=1 to n do
Read(f,a[i]);
Close(f);
End;
Procedure Khoitao;
Begin
docfile;
fillchar(v,sizeof(v),0);
fillchar(N1,sizeof(N1),0);
End;
Procedure Chiaday;
var i: Byte;
j: Longint;
Begin
v[1,0]:=1;
Max:=0;
For i:=1 to n do
Begin
For j:= max downto 0 do
If v[1,j] =1 then
if v[1,j+A[i]] = 0 then
Begin
v[1,j+A[i]]:=1;
v[2,j+A[i]]:=i;
End;
Max:=Max +a[i];


End;
j1:= Max div 2;

While v[1,j1] = 0 do dec(j1);
j2:= Max -j1;
Clech:=j2-j1;
End;
Procedure Ghitep;
Var i: longint;
f:text;
Begin
Assign(f,fo); rewrite(f);
i:=j1;
writeln(f,'chenh lech: ',clech);
Writeln(f,'Nhom 1:');
While i>=1 Do
Begin
Write(f,A[v[2,i]],' ');
N1[v[2,i]]:=1;
i:=i- a[v[2,i]];
end;
Writeln(f);
Writeln(f,'nhom 2:');
For i:=1 to n do
If N1[i] =0 then
Write(f,A[i],' ');
close(f);
End;
BEGIN
Khoitao;
Chiaday;
Ghitep;
End.



Bµi 2
Program bai2;
Const fi='bai2.inp';
fo='bai2.out';
Var a : array[1..50,1..50] of Byte;
d,c : array[1..50] of Byte;
n,m, dem, soluong: Byte;
Lcay:Byte;
Procedure Docfile;
Var i,j: Byte;
f:Text;
Begin
Assign(f,fi); reset(f);
Read(f,n,m);
Fillchar(d,sizeof(d),0);
Fillchar(c,sizeof(c),0);
Soluong:=0;
for i:=1 to n do
for j:= 1 to m do
Begin
Read(f,a[i,j]);
If a[i,j]=1 then
Begin
Inc(d[i]);
Inc(c[i]);
Inc(soluong);
End;
End;

Close(f);
End;
Function Timc(x:Byte):Byte;
Var j:Byte;
Begin
Timc:=0;
For j:= 1 to m do
If a[x,j]=1 then
Begin
Timc:=j;
Break;
End;
End;
Function Timd(x:Byte):Byte;
Var j:Byte;


Begin
Timd:=0;
For j:= 1 to n do
If a[j,x]=1 then
Begin
Timd:=j;
Break;
End;
End;
Procedure chond(var p,q:Byte);
Var i,j:Byte;
Begin
q:=3;

For i:=1 to n do
if odd(d[i]) then
Begin
p:=i;
q:=1;
Break;
End;
For j:=1 to m do
if odd(c[i]) then
Begin
p:=j;
q:=2;
Break;
End;
For i:=1 to n do
if d[i]>0 then
Begin
p:=i;
q:=1;
Break;
End;
End;
Procedure Di(x,y:Byte);
Var i,j: Byte;
Begin
Repeat
If y=1 then
Begin
j:=timc(x);
If j>0 Then



Begin
Inc(dem);
Dec(d[x]);
Dec(c[j]);
Inc(a[x,j],y);
y:=3-y;
x:=j;
End
Else
Break;
End
Else
Begin
i:=timd(x);
If i>0 Then
Begin
Inc(dem);
Dec(d[i]);
Dec(c[x]);
Inc(a[i,x],y);
y:=3-y;
x:=i;
End
Else
Break;
End;
Until False;
End;

Procedure Xuly;
Var p,q:Byte;
Begin
Dem:=0;
Repeat
Chond(p,q);
di(p,q);
Until dem=soluong;
End;
Procedure Ghitep;
Var i,j:Byte;
f:Text;
Begin
Assign(f,fo); Rewrite(f);
for i:=1 to n do


Begin
For j:=1 to m do
If a[i,j]>0 then
Write(f,a[i,j]-1,' ')
Else
Write(f,0,' ');
Writeln(f);
End;
Close(f);
End;
BEGIN
Docfile;
xuly;

ghitep;
END.


Bµi 3
Program BAI1;
Const MaxN=100;
fi='bai3.inp';
fo='bai3.out' ;
Var A:Array[1..MaxN] of byte;
B:array[1..Maxn] of byte;
c:array[1..Maxn] of byte;
DCSC,s:string;
t:integer;
max,vt:byte;
xauchar, xaunum,stt:string;
Procedure Docfile;
Var i: Byte;
f: Text;
Begin
Assign(f,fi); reset(f);
Readln(f,s);
Close(f);
End;
Procedure TACHXAU;
Var i:Byte;
Begin
xauchar:='';
xaunum:='';
i:=1;

While i<= length(s) do
Begin
If (s[i]>='A')and(s[i]<='Z') then
Begin
xauchar:=xauchar+s[i];
Xaunum := Xaunum + '';
End
Else
Begin
Xauchar:=Xauchar+'';
Xaunum:=xaunum+s[i];
End;
i:=i+1;
end;
For i:=1 to length(xauchar) do
if xauchar[i]=''then delete(xauchar,i,1);
For i:=1 to length(xaunum) do


if xaunum[i]=''then delete(xaunum,i,1);
End;
Procedure XLCHAR(st:string);
var n,i,j:Byte;
TG:byte;
Begin
n:=length(st);
for i:= 1 to maxn do
a[i]:=0;
for i:= 1 to n do
a[i]:=ord(st[i]);

for i:= 1 to n do
for j:= 1 to n-1 do
if a[i] < a[j] then
Begin
TG:=A[i];
A[i]:=A[j];
A[j]:=TG;
End;
stt:='';
for i:=1 to n do
stt:= stt + chr(a[i]);
End;
Procedure XLNUM(NUM:String);
Var d,i,j,n:byte;
BCX:string;
Begin
n:=length(xaunum);
For i:=1 to n do
Val(xaunum[i],b[i],t);
d:=b[2]-a[1];
c[1]:=1;
c[2]:=2;
for i:=3 to n do
if b[i]-b[i-1]=d then
Begin
c[i]:=c[i-1]+1;
end
Else
Begin
c[i]:=2;

d:=b[i]-b[i-1];
end;


max:=2;
for i:=1 to n do
if c[i]>max then
begin
max:=c[i];
vt:=i;
end;
for j:=vt downto vt-max+1 do
Begin
str(b[j],bcx);
DCSC:=DCSC+ bcx;
End;
end;
Procedure ghitep;
Var f:text;
Begin
assign(f,fo); rewrite(f);
Writeln(f,stt);
Writeln(f,max);
Write(f,DCSC);
end;
BEGIN
docfile;
tachxau;
XLCHAR(xauchar);
XLNUM(xaunum);

ghitep;
End.
BiÓu ®iÓm
Bµi 1 (3®) Ch¬ng tr×nh râ rµng, ®óng
Bµi 2 (5®) Ch¬ng tr×nh râ rµng, ®óng
Bµi 3 (2®) Ch¬ng tr×nh râ rµng, ®óng



×