• Thuật tóan đúng, có sử dụng chương trình con.. • Test cho kết quả đúng: Cho điểm tối đa ứng với mỗi bài... • Thuật tóan đúng, có sử dụng chương trình con.. • Test cho kết quả đúng: Cho
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI CHỌN HỌC SINH GIỎI LỚP 12
MÔN : TIN HỌC
Khóa ngày 20 tháng 12 năm 2006
Thời gian 180 phút ( Không kể thời gian giao đề)
Yêu cầu chung:
• Chương trình trình bày đẹp có cấu trúc rõ ràng mạch lạc.
• Thuật tóan đúng, có sử dụng chương trình con.
• Test cho kết quả đúng: Cho điểm tối đa ứng với mỗi bài.
Bài 1 : (8 điểm)
1.Thang điểm
2 Chương trình tham khảo
Program kiemhoanthien;
uses wincrt;
var n,k,dem:longint;
a:array[1 1000]of longint;
f:text;
{========================================================} function hoanthien(x:longint):boolean;
var sum,i:longint;
begin hoanthien:=false;
if odd(x) then exit;
sum:=1;
for i:=2 to X div 2 do
if (x mod i)=0 then sum:=sum+i;
if sum=x then hoanthien:=true;
end;
Procedure Doc;
var i:integer;
begin assign(f,'HT.INP');
{$I-} Reset(f);{$I+}
if IOResult<>0 then begin
writeln('loi khi doc file');
readln; halt;
end;
readln(f,n);
for i:=1 to n do begin
read(f,a[i]);
ĐÁP ÁN 1A
Trang 2end;
Close(f);
end;
{=============================================================} Procedure xuly;
var i,j,dem:longint;
begin assign(f,'HT.OUT');
rewrite(f);
For i:=1 to n do
if hoanthien(a[i])=true then writeln(f,a[i],' la so hoan thien ');
Close(f);
end;
{======================================================}
BEGIN doc;
xuly;
END
Bài 2 : (12 điểm)
1.Thang điểm
2 Chương trình tham khảo
Bài giải tham khảo:
Program duongditamgiac;
{ta dung mang b[i,j] de luu do dai duong di tu diem xuat phat (1,1) den dich la (i,j)
tu o (i,j) ta co the den o (i+1,j) hoac (i+1,j+1)
dung phuong phap vet can, va huong dich ta tinh duoc do dai duong di tu (1,1) den dich la (N,j) (1<=j<=N)
tuc la cac gia tri b[n,1],b[n,2],b[n,3] b[n,n] sau do tim gia tri lon nhat cua day nay in ra man hinh}
uses crt;
const max=100;
var N,i,j,k:byte;
a:array[1 100,1 100]of byte;
b:array[1 100,1 100] of word;
f:text;
Procedure nhap;
begin
Trang 3assign(f,'TAMGIAC.INP');
{$I-} Reset(f);{$I+}
if IOResult<>0 then
begin
writeln('loi khi doc file');
readln; halt;
end;
readln(f,n);
fillchar(a,sizeof(a),0);
for i:=1 to n do
begin
for j:=1 to i do read(f,a[i,j]);
readln(f);
end;
Close(f);
end;
Procedure xuly;
begin
B[1,1]:=a[1,1];
For i:=2 to n do
begin
for j:=1 to i-1 do
for k:=0 to 1 do
begin
if (b[i,j+k]=0) or (b[i-1,j]+a[i,j+k]>b[i,j+k])then b[i,j+k]:=b[i-1,j]+a[i,j+k];
end;
end;
j:=0;
for i:=1 to N do
if j<b[N,i] then j:=b[N,i];
writeln(j);
end;
BEGIN
Fillchar(b,sizeof(b),0);
nhap;
xuly;
readln;
END
Trang 4
-Hết -SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI CHỌN HỌC SINH GIỎI LỚP 12
MÔN : TIN HỌC
Khóa ngày 20 tháng 12 năm 2006
Thời gian 180 phút ( Không kể thời gian giao đề)
Yêu cầu chung:
• Chương trình trình bày đẹp có cấu trúc rõ ràng mạch lạc.
• Thuật tóan đúng, có sử dụng chương trình con.
• Test cho kết quả đúng: Cho điểm tối đa ứng với mỗi bài.
Bài 1 : (8 điểm)
1.Thang điểm
2 Chương trình tham khảo
Program DUONGTHANG;
uses wincrt;
var f:text;
a,b,c,m,n,p:Real;
SS,Tr,Cat: Boolean;
begin
assign(f,'DTINP.TXT');
{$I-}reset(f);{$I+}
if ioresult<>0 then
begin
write('khong mo duoc tep');
halt;
end;
read(f,a,b,c);
readln(f);
read(f,m,n,p);
close(f);
if (sqr(a)+sqr(b)=0)or (sqr(m)+sqr(n)=0)then begin
write('Du lieu khong hop le!');
halt;
end;
Tr:= (a*n = b*m)and(a*p = c*m);
SS:= (a*n = b*m)and(a*p <> c*m);
Cat:= (a*n <> b*m);
assign(f,'DTOUT.TXT');
rewrite(f);
If Tr then write(f,'Hai duong thang trung nhau');
If SS then write(f,'Hai duong thang song song');
If Cat then write(f,'Hai duong thang cat nhau');
ĐÁP ÁN 1B
Trang 5close(f);
end
Bài 2: (12 điểm)
1.Thang điểm
2 Chương trình tham khảo
Program quanhehocsinh;
uses wincrt;
var n,i:integer;
a:array[1 100,1 100]of integer;
ph:array[1 100]of integer;
f:text;
{========================================================} Procedure Doc;
var i,j:integer;
begin
assign(f,'QHHS.INP');
{$I-} Reset(f);{$I+}
if IOResult<>0 then
begin
writeln('loi khi doc file');
readln; halt;
end;
readln(f,n);
for i:=1 to n do
begin
for j:=1 to n do read(f,a[i,j]);
readln(f);
end;
Close(f);
end;
{=============================================================} Procedure tieptuc(i,k:integer);
var j:integer;
begin
For j:=1 to n do
if a[i,j]<>0 then
if ph[j]=0then
begin
ph[j]:=k;
tieptuc(j,3-k);
end
else
if ph[j]=3-k then
begin
Trang 6write(f,'KHONG THE XEP 2 PHONG');
Close(f);
Halt;
end;
end;
{==============================================================} Procedure chon;
var i,j:integer;
begin
for i:=1 to n do ph[i]:=0;
for i:=1 to n do
if ph[i]=0 then
begin
ph[i]:=1;
tieptuc(i,2);
end;
end;
{======================================================}
BEGIN
Doc;
assign(f,'QHHS.OUT');
REWRITE(f);
chon;
for i:=1 to n do
if ph[i]=1 then write(f,i,' ');
writeln(f);
For i:=1 to n do
if ph[i]=2 then write(f,i,' ');
close(f);
END