Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tối đa hóa thể tích hộp chữ nhật với tổng 3 cạnh cho trước trong C++


Cho tổng 3 cạnh của hộp chữ nhật (cuboid): S = L + B + H. Thể tích V = L × B × H. Nhiệm vụ: tìm L, B, H nguyên dương (hoặc thực) sao cho V lớn nhất.

Theo bất đẳng thức AM-GM: (L+B+H)/3 ≥ (L×B×H)^(1/3). Thể tích lớn nhất khi L = B = H = S/3.

Với số nguyên: chia S thành 3 phần càng gần nhau càng tốt.

Ví dụ 1

Input – S = 6

Output – Thể tích max = 8

Giải thích: Các tổ hợp có thể:

[1,1,4] → V=4
[1,2,3] → V=6
[2,2,2] → V=8 (MAX)

Ví dụ 2

Input – S = 10

Output – Thể tích max = 36

Giải thích: Chia gần bằng: L=3, B=3, H=4 → V=3×3×4=36

Thuật toán (chia nguyên)

  1. L = S / 3 (phần nguyên).
  2. Cập nhật S = S - L.
  3. B = S / 2 (phần nguyên).
  4. H = S - B (phần còn lại).
  5. Thể tích = L × B × H.

Ví dụ code

#include <bits/stdc++.h>
using namespace std;

int maximizeVolume(int sumOfSides) {
    int length = sumOfSides / 3;
    sumOfSides -= length;
    int breadth = sumOfSides / 2;
    int height = sumOfSides - breadth;
    return length * breadth * height;
}

int main() {
    int sos = 12;
    cout << "Maximized volume: " << maximizeVolume(sos) << endl;
    return 0;
}

Kết quả

Maximized volume: 64

Giải thích: S=12 → L=4, S=8 → B=4, H=4 → V=4×4×4=64.

Lưu ý: Thứ tự tính L, B, H không quan trọng do tính đối xứng. Kết quả luôn cho 3 số chênh lệch nhau tối đa 1 đơn vị.