Cho hỡnh chữ nhật ABCD cú chiều dài AB là a cm, chiều rộng AD là b cm với a, b là cỏc số nguyờn dương khụng vượt quỏ 10000.. Một điểm M trờn đoạn BC, một điểm N trờn đoạn CD sao cho độ d
Trang 1Sở 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 lập trỡnh bằng ngụn ngữ Pascal giải cỏc bài toỏn sau:
Bài I (10 điểm): DIỆN TÍCH CÁC HèNH.
Cho hỡnh chữ nhật ABCD cú chiều dài AB là a (cm), chiều rộng AD là b (cm) với
a, b là cỏc số nguyờn dương khụng vượt quỏ 10000 Một điểm M trờn đoạn BC, một điểm N trờn đoạn CD sao cho độ dài (tớnh bằng cm) cỏc đoạn BM, CN bằng nhau và là
số nguyờn khụng õm
Yờu cầu:
1 Biết độ dài BM, tớnh diện tớch hỡnh chữ nhật ABCD và diện tớch tam giỏc MCN 2.Tỡm giỏ trị lớn nhất và giỏ trị nhỏ nhất của diện tớch tam giỏc AMN khi M, N thay đổi
Dữ liệu vào: Dữ liệu của bài toỏn cho trong tệp tin DIENTICH.INP gồm ba số a, b, x
(x b a, x là độ dài BM trong yờu cầu 1) được ghi trờn cựng một dũng theo đỳng thứ
tự trờn, hai số liờn tiếp cỏch nhau một khoảng trắng
Dữ liệu ra: Kết quả ghi ra màn hỡnh (hoặc 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à diện tớch hỡnh chữ nhật ABCD
- Dũng thứ ba là diện tớch tam giỏc MCN
- Dũng thứ tư là giỏ trị lớn nhất của diện tớch tam giỏc AMN
- Dũng thứ năm là giỏ trị nhỏ nhất của diện tớch tam giỏc AMN
(Cỏc giỏ trị diện tớch được ghi trong dạng thập phõn với 1 chữ số sau dấu phẩy)
Vớ d : ụ:
DIENTICH.INP Kết quả trờn màn hỡnh (hoặc file DIENTICH.OUT)
60.0 4.0 30.0 17.5
Hạn chế kỹ thuật:
- Ghi tờn file bài làm là DIENTICH.PAS.
- Dữ liệu vào là chớnh xỏc khụng cần kiểm tra.
- Nếu khụng nhập được dữ liệu vào từ file, thớ sinh cú thể nhập dữ liệu vào từ bàn phớm
- Cú khoảng 60% số bộ test cú a < 100.
Bài II(10 điểm): DÃY SỐ.
đề thi chính thức
M
N
Trang 2Cho số nguyờn dương S và dóy số gồm N số nguyờn dương F1, F2, , FN Dóy số đó cho được gọi là dóy tăng dần nếu: Fi Fi+1 i 1 , 2 , ,n 1 ( hay F1 F2 F3
FN )
Chỳng ta gọi hai số hạng Fi1 và Fi2 trong dóy đó cho (với i1 i2; i1,i2 1 , 2 , ,n ):
- Là một “cặp đụi xung khắc” nếu Fi1 + Fi2 = 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ố F1, F2, , FN 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ố Fi của dóy (Fi < 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à FN
- 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
Trang 3Mô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. 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} à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);
Trang 4writeln(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} ài 1 - DIENTICH.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;
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
if (j<>k)and so[i,k,j] then
begin write(i,j,k,' ',i,k,j); exit; end;
Trang 5if (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;
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.