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
2 câu trả lời
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;