БлогNot. Максимальный по объёму параллелепипед с заданной суммой длины, ширины и высоты

Максимальный по объёму параллелепипед с заданной суммой длины, ширины и высоты

По заданной сумме длины, ширины и высоты прямоугольного параллелепипеда найти соотношение сторон, обеспечивающее максимальный объём параллелепипеда. Ну и вывести сам этот объём, конечно.

Увиденное мной сегодня переборное решение, конечно, крайне неэффективно и имеет вычислительную сложность 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 [2658 просмотров]


теги: c++ ошибка алгоритм mathcad

К этой статье пока нет комментариев, Ваш будет первым