ได้รับผลรวมของ 3 ด้านของทรงสี่เหลี่ยมมุมฉาก (Cuboid) คือ ความยาว (L), ความกว้าง (B), ความสูง (H) ปริมาตรคำนวณจาก V = L × B × H
ปริมาตรจะสูงสุดเมื่อ 3 ด้านมีค่าใกล้เคียงกันมากที่สุด (หลักการ AM-GM inequality: ผลคูณสูงสุดเมื่อตัวเลขเท่ากัน)
ตัวอย่าง
S = 6
ด้านที่เป็นไปได้:
[1,1,4] → V=4 [1,2,3] → V=6 [2,2,2] → V=8 ← สูงสุด
Output: 8
S = 10
L = 10/3 = 3 (เหลือ 7) B = 7/2 = 3 (เหลือ 4) H = 4 V = 3×3×4 = 36
Output: 36
แนวทางแก้ปัญหา
- รับค่า
sum(ผลรวม 3 ด้าน) L = sum / 3(หารจำนวนเต็ม) แล้วsum -= LB = sum / 2แล้วsum -= BH = sum(เศษที่เหลือ)- คืนค่า
L × B × H
ลำดับการคำนวณ L,B,H ไม่สำคัญ เพราะการหารจำนวนเต็มจะกระจายเศษให้เท่าที่สุด
ตัวอย่างโค้ด
#include <iostream>
using namespace std;
long long maximizeVolume(int sumOfSides) {
long long length = sumOfSides / 3;
sumOfSides -= length;
long long breadth = sumOfSides / 2;
long long height = sumOfSides - breadth;
return length * breadth * height;
}
int main() {
int sos = 12;
cout << "Maximized volume: " << maximizeVolume(sos) << endl;
return 0;
}
ผลลัพธ์
Maximized volume: 64
12 → L=4, B=4, H=4 → 4×4×4=64
การพิสูจน์ทางคณิตศาสตร์ (AM-GM Inequality)
สำหรับจำนวนบวก a,b,c ที่ a+b+c = S คงที่:
(a+b+c)/3 ≥ ³√(abc) S/3 ≥ ³√V V ≤ (S/3)³
ความเท่ากันเกิดเมื่อ a = b = c = S/3 แต่ถ้า S ไม่หาร 3 ลงตัว ให้กระจายเศษให้เท่าที่สุด (ต่างกันสูงสุด 1)
กรณี S ใหญ่ – ใช้ long long
หาก S ใหญ่ (เช่น 10^9) ผลคูณอาจล้น int ควรใช้ long long (64-bit) ซึ่งรองรับถึง ~9×10¹⁸