Cho một hình chữ nhật ABCD, cạnh AB=a, cạnh BC=b. a,b là các số
nguyên dương trong khoảng [1, 100]
Một điểm M chạy trong đoạn BC với BM=x . x là số nguyên duơng trong
khoảng [0, b], một điểm N chạy trong đoạn CD với CN=x
Tính 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 lưu động.
Dữ liệu vào: Được cho trong tập tin CHUNHAT.inp, gồm một dòng ghi hai số
nguyên dương lần lượt là a, b. Hai số cách nhau một khoảng trắng
Dữ liệu ra : Yêu cầu xuất ra tập tin CHUNHAT.out, gồm bốn dòng:
+ Dòng đầu là giá trị lớn nhất của diện tích tam giác AMN (một chữ số thập
phân)
+ Dòng thứ hai là một giá trị của x để diện tích tam giác AMN đạt giá trị lớn
nhất
+ Dòng thứ ba là giá trị nhỏ nhất của diện tích tam giác AMN (một chữ số
thập phân)
+ Dòng thứ tư là một giá trị của x để diện tích tam giác AMN đạt giá trị nhỏ
nhất
Ví dụ:
CHUNHAT.inp
10 6
CHUNHAT.out
30.0
0
17.5
5
const fi = ‘chunhat.inp’;
fo = ‘chunhat.out’;
var a,b: integer;
i,j,x,y,m,n: integer;
min,max: real;
s,v:array[0..100] of real;
f,g: text;
begin
assign(f,fi);
reset(f);
repeat
readln(f,a,b);
until (a>=1) and (a<=100) and (b>=1) and (b<=100);
for x:=0 to b do
begin
s[x]:=a*b-(a*x/2)-((b-x)*x/2)-((a-x)*b/2);
v[x]:=a*b-(a*x/2)-((b-x)*x/2)-((a-x)*b/2);
end;
max:=s[0]; m:=0;
for i:=1 to b do
if s[i]>max then begin max:=s[i]; m:=i; end;
min:=v[0]; n:=0;
for j:=1 to b do
if v[j]<min then begin min:=v[j]; n:=j; end;
assign(g,fo);
rewrite(g);
writeln(g,max:5:1);
writeln(g,m);
writeln(g,min:5:1);
writeln(g,n);
close(f);close(g);
end.
Đáp án
const fi = ‘chunhat.inp’;
fo = ‘chunhat.out’;
var a,b: integer;
i,j,x,y,m,n: integer;
min,max: real;
s,v:array[0..100] of real;
f,g: text;
begin
assign(f,fi);
reset(f);
repeat
readln(f,a,b);
until (a>=1) and (a<=100) and (b>=1) and (b<=100);
for x:=0 to b do
begin
s[x]:=a*b-(a*x/2)-((b-x)*x/2)-((a-x)*b/2);
v[x]:=a*b-(a*x/2)-((b-x)*x/2)-((a-x)*b/2);
end;
max:=s[0]; m:=0;
for i:=1 to b do
if s[i]>max then begin max:=s[i]; m:=i; end;
min:=v[0]; n:=0;