Sở giáo dục và đào tạo Đề thi chọn học sinh giỏi lớp 9 THCS
Tỉnh ninh bình năm học 2007 - 2008
Môn: Tin học
Thời gian làm bài: 150 phút (không kể thời gian giao đề)
(Đề thi gồm 02 trang)
Em hóy lp trỡnh bng ngụn ng Pascal gii cỏc bi toỏn sau:
Bi I (10 im): DIN TCH CC HèNH.
Cho hỡnh ch nht ABCD cú chiu di AB l a (cm), chiu rng AD l b (cm) vi
a, b l cỏc s nguyờn dng khụng vt quỏ 10000. Mt im M trờn on BC, mt
im N trờn on CD sao cho di (tớnh bng cm) cỏc on BM, CN bng nhau v l
s nguyờn khụng õm.
Yờu cu:
1. Bit di BM, tớnh din tớch hỡnh ch nht ABCD v din tớch tam giỏc MCN.
2.Tỡm giỏ tr ln nht v giỏ tr nh nht ca din tớch tam giỏc AMN khi M, N thay i.
D liu vo: D liu ca bi toỏn cho trong tp tin DIENTICH.INP gm ba s a, b, x
(x
b
a, x l di BM trong yờu cu 1) c ghi trờn cựng mt dũng theo ỳng th
t trờn, hai s liờn tip cỏch nhau mt khong trng.
D liu ra: Kt qu ghi ra mn hỡnh (hoc ghi ra file DIENTICH.OUT) trờn 5 dũng:
- Dũng u l ba s a, b v x.
- Dũng th hai l din tớch hỡnh ch nht ABCD.
- Dũng th ba l din tớch tam giỏc MCN
- Dũng th t l giỏ tr ln nht ca din tớch tam giỏc AMN
- Dũng th nm l giỏ tr nh nht ca din tớch tam giỏc AMN
(Cỏc giỏ tr din tớch c ghi trong dng thp phõn vi 1 ch s sau du phy).
Vớ d:
DIENTICH.INP Kt qu trờn mn hỡnh (hoc file DIENTICH.OUT)
10 6 2 10 6 2
60.0
4.0
30.0
17.5
Hn ch k thut:
- Ghi tờn file bi lm l DIENTICH.PAS.
- D liu vo l chớnh xỏc khụng cn kim tra.
- Nu khụng nhp c d liu vo t file, thớ sinh cú th nhp d liu vo t bn phớm
- Cú khong 60% s b test cú a < 100.
đề thi chính thức
A
B
D
C
M
N
Bài II(10 điểm): DÃY SỐ.
Cho số nguyên dương S và dãy số gồm N số nguyên dương F
1
, F
2
, ..., F
N
. Dãy số đã
cho được gọi là dãy tăng dần nếu: F
i
≤
F
i+1
∀
i
{ }
1,...,2,1
−∈
n
( hay F
1
≤
F
2
≤
F
3
≤
...
≤
F
N
).
Chúng ta gọi hai số hạng F
i1
và F
i2
trong dãy đã cho (với i1
≠
i2; i1,i2
{ }
n,...,2,1
∈
):
- Là một “cặp đôi xung khắc” nếu F
i1
+ F
i2
= S.
- Là một “cặp đôi lý tưởng” nếu chúng cùng có ba chữ số, các chữ số của số hạng này
giống hệt của số hạng kia nhưng khác về thứ tự xuất hiện - ví dụ 123 và 132 hay 121 và
211 là các cặp đôi lý tưởng còn 121 và 122 hay 457 và 457 thì không phải.
Yêu cầu: Cho biết S và dãy số F
1
, F
2
, ..., F
N
. Hãy xác định xem dãy đã cho có phải dãy
tăng dần hay không, tính số cặp đôi xung khắc và tìm một cặp đôi lý tưởng (nếu có) trong
dãy đã cho.
Dữ liệu vào: Dữ liệu vào của bài toán được cho trong tệp tin DAYSO.INP với cấu
trúc như sau:
- Dòng đầu tiên gồm hai số N và S (N
≤
50000, S <1000).
- Dòng thứ i trong N dòng tiếp theo chứa một số là số F
i
của dãy (F
i
< 500).
Dữ liệu ra: Kết quả ghi ra trên màn hình (hoặc ghi ra file DAYSO.OUT)bốn dòng:
- Dòng đầu ghi ba số N, S và F
N
.
- Dòng thứ hai ghi CO nếu dãy đã cho là dãy tăng dần, ghi KHONG nếu ngược lại.
- Dòng thứ ba ghi một số là số cặp đôi xung khắc trong dãy đã cho.
- Dòng thứ tư ghi hai số là một cặp đôi lý tưởng tìm được trong dãy đã cho, nếu
không có cặp đôi lý tưởng nào thì ghi hai số 0.
Ví dụ:
DAYSO.INP Kết quả trên màn hình (hoặc file DAYSO.OUT)
5 5
1
2
3
4
5
5 5 5
CO
2
0 0
10 111
110
110
1
1
5
5
10
10
10
101
10 111 101
KHONG
7
110 101
Hạn chế kỹ thuật:
- Ghi tên file bài làm là DAYSO.PAS
- Dữ liệu vào là chính xác không cần kiểm tra.
- Có khoảng 30% số bộ test có thể nhập dữ liệu vào từ bàn phím.
- Có khoảng 60% số bộ test có N < 1000.
------------- HÕt-------------
Hä vµ tªn thÝ sinh :.............................................. Sè b¸o danh .......................
Chữ kí giám thị 1 Chữ kí giám thị 2
Sở giáo dục và đào tạo Hớng dẫn chấm thi Chọn hsg lớp 9 THCS
Tỉnh ninh bình năm học 2007 - 2008
Môn: Tin học
I- Dữ liệu chấm bài.
Giám khảo copy 14 file dữ liệu vào gồm:
- 7 file test bài 1 lần lợt là DIENTICH.IN1, DIENTICH.IN2, , DIENTICH.IN7,
- 7 file test bài 2 lần lợt là DAYSO.IN1, DAYSO.IN2, , DAYSO.IN7
vào th mục chứa Turbo Pascal trên máy chấm bài.
II Chấm bài.
Với mỗi bài thi của 1 thí sinh:
Chấm bài 1:
1. Giám khảo Copy bài làm có tên DIENTICH.PAS vào th mục chứa Turbo Pascal trên máy
chấm bài.
2. Với mỗi file dữ liệu vào - nếu học sinh không nhập dữ liệu từ file thì giám khảo nhập
từ bàn phím - chạy chơng trình của học sinh rồi quan sát kết quả trên màn hình (hoặc trên
file dữ liệu ra) so sánh với đáp án và cho điểm chi tiết nh sau:
+ Ba test đầu, mỗi test 2 điểm:
- Ghi ra đúng a, b, x cho 0,25 điểm
- Ghi ra đúng diện tích hình chữ nhật ABCD cho 0,25 điểm
- Ghi ra đúng diện tích tam giác MCN cho 0,50 điểm
- Ghi ra đúng diện tích nhỏ nhất cho 0,50 điểm
- Ghi ra đúng diện tích lớn nhất cho 0,50 điểm
+ Bốn test sau, mỗi test 1 điểm:
(Không cho điểm ghi đúng a, b, x nữa)
- Ghi ra đúng diện tích hình chữ nhật ABCD cho 0,25 điểm
- Ghi ra đúng diện tích tam giác MCN cho 0,25 điểm
- Ghi ra đúng diện tích nhỏ nhất cho 0,25 điểm
- Ghi ra đúng diện tích lớn nhất cho 0,25 điểm
Chấm bài 2:
1. Giám khảo Copy bài làm có tên DAYSO.PAS vào th mục chứa Turbo Pascal trên máy
chấm bài.
2. Với mỗi file dữ liệu vào - nếu học sinh không nhập dữ liệu từ file thì giám khảo nhập
từ bàn phím 2 test đầu tiên - chạy chơng trình của học sinh rồi quan sát kết quả trên màn
hình so sánh với đáp án và cho điểm chi tiết nh sau:
+ Ba test đầu, mỗi test 2 điểm:
- Ghi ra đúng N, S, F
N
cho 0,25 điểm
- Ghi ra đúng dãy tăng dần hay không cho 0,75 điểm
- Ghi ra đúng số cặp xung khắc cho 0,75 điểm
- Ghi ra đúng cặp đôi lý t ởng cho 0,25 điểm
+ Bốn test sau, mỗi test 1 điểm:
(Không cho điểm ghi ra đúng N, S, F
N
nữa).
- Ghi ra đúng dãy tăng dần hay không cho 0, 25 điểm
- Ghi ra đúng số cặp xung khắc cho 0,50 điểm
- Ghi ra đúng cặp đôi lý t ởng cho 0,25 điểm
{B i 1 - DIENTICH.PAS}à
var a,b,x:integer;
min, max,s,s1,s2:real;
f: text;
begin
Assign(f,'dt.inp');
reset(f);
readln(f,a,b,x);
close(f);
writeln(a,’ ‘,b,’ ‘,x);
s1:=a*b; s2:=x*(b-x)/2;
min:=s1/2; max:=s1/2;
for x:=1 to b do
begin
s:=s1 - (a*x + x*(b-x) + b*(a-x))/2;
if min>s then min:=s;
if max<s then max:=s;
end;
writeln(s1:12:1);writeln(s2:12:1);
writeln(max:12:1);writeln(min:12:1);
readln;
end.
{B i 2 - DAYSO.PAS}à
uses crt;
const fi = 'dayso.inp';
max = 500;
var a:array[1..500] of word;
so:array[1..4,0..9,0..9] of boolean;
f:text; tangdan:boolean;
n,s,fn,socu:word; Tongxk:longint;
procedure nhap;
var i,k:word;
begin
fillchar(a,sizeof(a),0);
assign(f,fi);
reset(f);
socu:=0; tangdan:=true;
readln(f,n,s);
for i:= 1 to n do
begin
readln(f,k);
inc(a[k]);
if k<socu then tangdan:=false;
socu:=k;
if k>100 then
so[k div 100,(k div 10)mod 10,k mod 10]:=true;
end;
fn:=k;
close(f);
end;
procedure demxungkhac;
var i:word;
begin
tongxk:=0;
for i:= 1 to ((s-1)div 2) do
tongxk:=tongxk+a[i]*a[s-i];
if not odd(s) then
begin
i:=s div 2;
tongxk:=tongxk+(a[i]*(a[i]-1) div 2);
end;
end;
procedure timlytuong;
var i,j,k:byte;
begin
for i:=1 to 4 do
for j:=0 to 9 do
for k:=0 to 0 do
if so[i,j,k] then
begin
if (j<>k)and so[i,k,j] then
begin write(i,j,k,' ',i,k,j); exit; end;
if (k<>0)and(i<>k)and so[k,j,i] then
begin write(i,j,k,' ',k,j,i); exit; end;
if (j<>0)and(i<>j)and so[j,i,k] then
begin write(i,j,k,' ',j,i,k); exit; end;
if (k<>0)and((i<>j)or(i<>k)or(k<>j))and so[k,i,j] then
begin write(i,j,k,' ',k,i,j); exit; end;
if (j<>0)and((i<>j)or(i<>k)or(k<>j))and so[j,k,i] then
begin write(i,j,k,' ',k,j,i); exit; end;
end;
writeln(0,' ',0);
end;
procedure inkq;
begin
clrscr;
writeln(n,' ',s,' ',fn);
if tangdan then writeln('CO')
else writeln('KHONG');
demxungkhac;
writeln(tongxk);
timlytuong;
end;
begin
nhap;
inkq;
readln;
end.