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 không 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 (68.85 KB, 4 trang )

Sở giáo dục - đào tạo QB

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

Đề chính thức

Dành cho học sinh không 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; VONGHAT.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

GIAIMA.PAS


Begin
sto:=sto+Gm(Copy(sti,i,8));
inc(i,8);
end;

End;
BEGIN
Read_Data;
Process;
Write_Data;
END.

C©u 3: (3.5 ®iÓm): Vßng h¹t
Program Chuoi_hat;
Const MaxN=10000;
fi='Vonghat.in3';
fo='Vonghat.ou3';
Type bb=Byte;ww=Word;ii=Integer; ll=Longint;
mmc=Array[1..MaxN] of bb;
Var

A:mmc;
n,Luudem,Luucat:ww;
(*****************)
Procedure Read_Data;
Var f:Text;
k,i,j:ww;
Begin
fillchar(A,sizeof(A),0);
Assign(f,fi);
Reset(f);
i:=1;
Readln(f,A[i]);
j:= 5000-1;
While not eof(f) do

Begin
inc(j);
read(f,A[j]);
if not eoln(f) then
Begin
inc(i);
Read(f,A[i]);
end;
readln(f);
end;
For k:= j Downto 5000 do
Begin
inc(i);
A[i]:=A[k];
end;
n:=i;
Close(f);
end;
(*****************)
Procedure Processing;
Var i,j,Top,dau,truoc,sau:ww;
Begin
Luucat:=0;
Luudem:=0;
Top:=n;
dau:=0;
While A[Top]=A[1] do

VONGHAT.PAS



Begin
dec(Top);
inc(dau);
end;
if top = 0 then
Begin
Luucat:=n+1;
Luudem:=n;
exit;
end;
i:=1;
While A[i] = A[1] do
Begin
inc(dau);
inc(i);
end;
sau:=dau;
While i<=Top do
Begin
truoc:=sau;
sau:=0;
j:=i;
While A[i]=A[j] do
Begin
inc(sau);
inc(i);
end;
if truoc+sau > Luudem then
Begin

Luudem:=truoc+sau;
Luucat:=j;
end;
end;
if sau + dau > Luudem then
Begin
Luudem:=sau+dau;
Luucat:=Top+1;
end;
end;
(*****************)
Procedure Write_Data;
Var f:Text;
Begin
Assign(f,fo);
ReWrite(f);
if Luucat > n then
Write(f,n,' ' ,1)
else
Write(f,Luucat-1,' ' ,Luucat);
Write(f,' ',Luudem);
Close(f);
end;
(*****************)
Begin
Read_Data;
Processing;
Write_Data;
end.




×