kết quả từ 1 tới 4 trên 4

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

  1. #1
    Ðến Từ
    Quảng Bình
    Thành Viên Thứ: 353068
    Giới tính: Nam
    Bài gửi
    22

    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.INP TICHMAX.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 Ạ
    Quick reply to this message Trả lời       


  2. #2
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

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

    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.
    LCD: 13.3" 1920x1080 IPS
    CPU: Intel i7 - 4700MQ (2.4 GHz - 3.4 GHz)
    GPU: Nvidia GTX 765m with GDDR5 2GB
    RAM: 2x8GB G.Skill 2133
    HDD: Samsung SSD 850 Pro 512 GB
    2 kg.

  3. #3
    Ðến Từ
    Quảng Bình
    Thành Viên Thứ: 353068
    Giới tính: Nam
    Bài gửi
    22

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

    đề 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.

  4. #4
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

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

    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.

  5. Đã cảm ơn tengiday: