Nhờ các bạ gỡ rối thắc mắt về bài này

Cho một dãy gồm N số nguyên. Hãy tìm 3 số trong dãy với tích T của chúng là lớn nhất.
Dữ liệu: Vào từ file văn bản TICHMAX.INP:

  • Dòng đầu ghi số N (3 <= N <= 10000).
  • Dòng thứ hai chứa N số nguyên có giá trị tuyệt đối không vượt quá 30000.
Kết quả: Ghi ra file văn bản TICHMAX.OUT một số duy nhất T.
Ví dụ:
TICHMAX.INPTICHMAX.OUT
3
2 3 - 3
0


MÌNH TEXT TẤT CẢ CÁC TRƯỜNG HỢP ĐỀU ĐÚNG NHƯNG TẠI SAO TRƯỜNG HỢP TRÊN LẠI LÀ 0 MÀ KO PHẢI LÀ -18
NHỜ CÁC BẠN GIẢI THÍCH GIÙM Ạ
 

tengiday

Happy life
Theo như đề thì mình thấy ví dụ output có thể sai. Đề ko nói rõ là 3 số như thế nào nhỉ (đôi một khác nhau?).
Để giải bài này, mình nghĩ cần tìm tích 3 số max hoặc là 2 số min và 1 số max. Sau đó cần chú ý tích của chúng có thể vượt longint nên cần chọn 1 data type thích hợp cho T.
 
đề cụ thể của bài đây bạn
(Bài 1 – Tuyển sinh 2007 - 2008)
Cho một dãy gồm N số nguyên. Hãy tìm 3 số trong dãy với tích T của chúng là lớn nhất.
Dữ liệu: Vào từ file văn bản TICHMAX.INP:

  • Dòng đầu ghi số N (3 N 10000).
  • Dòng thứ hai chứa N số nguyên có giá trị tuyệt đối không vượt quá 30000.
Kết quả: Ghi ra file văn bản TICHMAX.OUT một số duy nhất T.
Ví dụ:
TICHMAX.INP
TICHMAX.OUT
9
3 5 1 7 9 0 9 -3 10
810

mình hiểu ý của bạn mình cũng giải bài này theo cách đó nhưng khi chạy bộ text trên thi kqua lại như thế mình cũng ko hiểu vi sao
bạ xem code cua mình sai cho nào ko nhé
const finp='tichmax.inp';
fout='tichmax.out';

var max1,max2,max3,min1,min2,x,i,n:longint;
kq:int64;

function max(a,b:longint):longint;
begin
if a>b then max:=a else max:=b;
end;

begin
assign(input,finp);
reset(input);
assign(output,fout);
rewrite(output);

max1:=-maxlongint;
max2:=max1;
max3:=max1;
readln(n);
for i:=1 to n do begin
read(x);
if (x>=max1) then
begin
max3:=max2;
max2:=max1;
max1:=x;
end else if (x>=max2) then
begin
max3:=max2;
max2:=x;
end else if (x>=max3) then
begin
max3:=x;
end;
if (x<=min1) then
begin
min2:=min1;
min1:=x;
end else if (x<=min2) then
min2:=x;
end;
kq:=max(max1*max2*max3,min1*min2*max1);

writeln(kq);

close(input);
close(output);
end.
 

tengiday

Happy life
Hình như bạn chưa khởi tạo 2 biến 'min1' và 'min2', cho nên mặc định của nó là 0 đấy. Nếu bạn cần debug chương trình thì bạn nên chèn dòng lệnh này vào trong vòng 'for'
Mã:
writeln('max1=', max1, '  max2=', max2, '  max3=', max3, '  min1=', min1, '  min2=', min2);
Như vậy sẽ in ra màn hình mấy giá trị max và min để dễ theo dõi. 1 vấn đề khác là hàm tính max của bạn phải là int64 hết bởi vì sẽ bị tràn biến nếu 3 con số nhân lại với nhau. Tùy theo compiler, mình nghĩ bạn nên để mấy biến max, min đó thành int64.
 
Sửa lần cuối:

Thống kê

Chủ đề
100,657
Bài viết
467,424
Thành viên
339,831
Thành viên mới nhất
TuanShinhanbank
Top