Максимальный по объёму параллелепипед с заданной суммой длины, ширины и высоты
По заданной сумме длины, ширины и высоты прямоугольного параллелепипеда найти соотношение сторон, обеспечивающее максимальный объём параллелепипеда. Ну и вывести сам этот объём, конечно.
Увиденное мной сегодня переборное решение, конечно, крайне неэффективно и имеет вычислительную сложность O(n2). Кроме того, в этой программе перебор можно сделать только в целых числах, и полученный ответ 18 будет просто неправильным:
#include <iostream> #include <algorithm> using namespace std; int maxvolume(int s) { int maxvalue = 0; for (int i = 1; i <= s - 2; i++) { for (int j = 1; j <= s - 1; j++) { int k = s - i - j; maxvalue = max (maxvalue, i * j * k); } } return maxvalue; } int main() { int s = 8; cout << maxvolume(s) << endl; cin.get(); return 0; }
Если знать, что искомый параллелипипед - это куб, а числа не обязаны быть целыми, имеем алгоритм сложности O(1) и функцию из одной строчки кода:
#include <iostream> #include <cmath> using namespace std; double maxvolume(double s) { return pow(s/3,3); } int main() { double s = 8.; cout << maxvolume(s) << endl; cin.get(); return 0; }
Или, избегая функции возведения в степень:
double maxvolume (double s) { double length = s / 3; s -= length; double breadth = s / 2; double height = s - breadth; return length * breadth * height; }
Или, проверив брутфорсом в Mathcad :)
для заданной суммы длины, ширины и высоты максимальный по объёму прямоугольный параллелипипед - это куб
04.03.2018, 13:47 [2778 просмотров]