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

Download đề và đáp án thi học sinh giỏi môn tin học lớp 11 2007 2008 tỉnh quảng bình (khối chuyên)

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 (69.33 KB, 4 trang )

Sở giáo dục - đào tạo QB
Đề chính thức

Kỳ thi chọn học Sinh Giỏi lớp 11
Năm học 2007-2008
hớng dẫn chấm môn tin học
Dành cho học sinh Chuyên

I/ Phơng pháp chung
- Giám khảo tạo các bộ dữ liệu vào, tính toán kết quả. Thực hiện chơng trình
của học sinh và so sánh kết quả.
- Giám khảo có thể sử dụng chơng trình mẫu để tính kết quả của dữ liệu vào:
SUM.PAS; GIAIMA.PAS; TSP.PAS .
- Chơng trình học sinh chạy đúng mỗi bộ test, giám khảo cho 0.5 điểm. Nh
vậy, nếu câu hỏi có 3 điểm thì giám khảo phải tạo đợc 6 bộ test.
- Nếu chơng trình chạy sai test nào thì giám khảo cho 0 điểm đối với test đó.
- Với những bài có nhiều kết quả, nếu thí sinh đa ra kết quả khác với đáp án
nhng vẫn đúng thì giám khảo cho điểm tối đa.
- Riêng câu 3:
+ Tổ chức đợc dữ liệu: 1 điểm.
+ 2.5 điểm còn lại giám khảo tạo 5 bộ test, mỗi test đúng cho 0.5 điểm.
II/ Chơng trình gợi ý
Câu 1: (3 điểm): Tổng các chữ số
SUM.PAS
Program Tong_cac_chu_so;
Const fi='Sum.in4';
fo='Sum.out';
MaxN=1000;
Type Arr=Array[1..MaxN] of Word;
Var A:Arr;
N,K:Word;


Procedure Read_Data;
Var i:Word; f:Text;
Begin
Assign(f,fi);
Reset(f);
Readln(f,N);
For i:= 1 to N do
Read(f,A[i]);
Close(f);
End;
Function Sum(x:Word):Word;
Var so:Word;
Begin
so:=0;
While x<>0 do
Begin
So:=So + x mod 10;
x:= x Div 10;
end;
Sum:=so;
End;
Procedure Write_Data;
Var i:Word; f:Text;
Begin


Assign(f,fo);
ReWrite(f);
K:=0;
For i:= 1 to N do

if Sum(A[i]) mod 2 = 1 then
inc(K);
Writeln(f,K);
For i:= 1 to N do
if Sum(A[i]) mod 2 = 1 then
Write(f,i,#32);
Close(f);
End;
BEGIN
Read_Data;
Write_Data;
END.

C©u 2: (3.5 ®iÓm): Gi¶i m·

Program Giai_ma;
Const fi='Giaima.inp';
fo='Giaima.out';
A:array[1..8] of Byte = (128,64,32,16,8,4,2,1);
Var sti,sto: string;
Procedure Read_Data;
Var f:text;
Begin
Assign(f,fi);
Reset(f);
Readln(f,sti);
Close(f);
End;
Procedure Write_Data;
Var f:text;

Begin
Assign(f,fo);
ReWrite(f);
Writeln(f,sto);
Close(f);
End;
Function Gm(st1:string):Char;
Var so,i:Byte;
Begin
so:=0;
For i:=Length(st1) Downto 1 do
If st1[i]= '1' then
so:= so + A[i];
Gm:=Chr(so);
End;
Procedure Process;
Var i:Byte;
Begin
sto:='';
i:=1;
While i <= Length(sti) do
Begin
sto:=sto+Gm(Copy(sti,i,8));
inc(i,8);
end;
End;

GIAIMA.PAS



BEGIN
Read_Data;
Process;
Write_Data;
END.

C©u 3: (3.5 ®iÓm): KiÕn leo quanh èng trô

TSP.PAS

Program Kien_leo_quanh_ong_tru;
Const MaxN=101;
fi='TSP.inp';
fo='TSP.ou1';
Type bb=Byte;ww=Word;ii=Integer; ll=Longint;
mmc=Array[1..MaxN] of bb;
mhc=Array[0..MaxN,0..MaxN] of ll;
Var QH:mhc;
n,m:bb;
(*****************)
Procedure Read_Data;
Var f:Text;
i,j:bb;
Begin
Assign(f,fi);
Reset(f);
Readln(f,m,n);
for i:=1 to m do
For j:=1 to n do
Read(f,QH[i,j]);

Close(f);
end;
(*****************)
Procedure Init;
var i:bb;
Begin
FillChar(QH,sizeof(QH),0);
Read_Data;
QH[0,1]:=QH[m,1];
QH[m+1,1]:=QH[1,1];
end;
(*****************)
Function Max(a,b,c:ll):ll;
Var mm:ll;
Begin
mm:=a;
if b>mm then mm:=b;
if c>mm then mm:=c;
Max:=mm;
end;
Procedure Processing;
Var i,j:bb;
Begin
For j:=2 to n do
Begin
For i:=1 to m do
QH[i,j]:=QH[i,j] + Max(QH[i-1,j-1],QH[i,j-1],QH[i+1,j-1]);
QH[m+1,j]:=QH[1,j];
QH[0,j]:=QH[m,j];
End;

end;
(*****************)


Procedure Write_Data;
Var f:Text;
i,Top,k,Row,col:bb;maxr:ll;
Vet:mmc;
Begin
Assign(f,fo);
ReWrite(f);
maxr:=0; Row:=0;
For i:=1 to m do
if QH[i,n] > maxr then
Begin
maxr:=QH[i,n];
Row:=i;
end;
Writeln(f,maxr);
FillChar(Vet,sizeof(Vet),0);
Top:=1;
Vet[Top]:=Row;
Col := n;
While Col > 1 do
Begin
k:=Row;
For i:=k-1 to k+1 do
if QH[i,Col-1]=Max(QH[Row-1,Col-1],QH[Row,Col-1],QH[Row+1,Col-1])
then
Begin

Row:=i;
if Row = 0 then Row := m;
if Row = m+1 then Row := 1;
end;
dec(Col);
inc(Top);
Vet[Top]:=Row;
end;
For i:=Top Downto 1 do
Write(f,Vet[i],' ');
Close(f);
end;
(*****************)
Begin
Init;
Processing;
Write_Data;
end.
(***************************************************************************)



×