Nos dan la suma de la longitud, la anchura y la altura , digamos S, de un paralelepípedo. La tarea es encontrar el volumen máximo que se puede lograr para que la suma de los lados sea S.
Volumen de un paralelepípedo = largo * ancho * alto
Ejemplos:
Input : s = 4 Output : 2 Only possible dimensions are some combination of 1, 1, 2. Input : s = 8 Output : 18 All possible edge dimensions: [1, 1, 6], volume = 6 [1, 2, 5], volume = 10 [1, 3, 4], volume = 12 [2, 2, 4], volume = 16 [2, 3, 3], volume = 18
Método 1: (Fuerza bruta)
La idea de ejecutar tres anidados, uno para largo, uno para ancho y otro para alto. Para cada iteración, calcule el volumen y compárelo con el volumen máximo.
A continuación se muestra la implementación de este enfoque:
C++
#include <bits/stdc++.h> using namespace std; // Return the maximum volume. int maxvolume(int s) { int maxvalue = 0; // for length for (int i = 1; i <= s - 2; i++) { // for breadth for (int j = 1; j <= s - 1; j++) { // for height int k = s - i - j; // calculating maximum volume. maxvalue = max(maxvalue, i * j * k); } } return maxvalue; } // Driven Program int main() { int s = 8; cout << maxvolume(s) << endl; return 0; }
Java
// Java code to Maximize volume of // cuboid with given sum of sides class GFG { // Return the maximum volume. static int maxvolume(int s) { int maxvalue = 0; // for length for (int i = 1; i <= s - 2; i++) { // for breadth for (int j = 1; j <= s - 1; j++) { // for height int k = s - i - j; // calculating maximum volume. maxvalue = Math.max(maxvalue, i * j * k); } } return maxvalue; } // Driver function public static void main (String[] args) { int s = 8; System.out.println(maxvolume(s)); } } // This code is contributed by Anant Agarwal.
Python3
# Python3 code to Maximize volume of # cuboid with given sum of sides # Return the maximum volume. def maxvolume (s): maxvalue = 0 # for length i = 1 for i in range(s - 1): j = 1 # for breadth for j in range(s): # for height k = s - i - j # calculating maximum volume. maxvalue = max(maxvalue, i * j * k) return maxvalue # Driven Program s = 8 print(maxvolume(s)) # This code is contributed by "Sharad_Bhardwaj".
C#
// C# code to Maximize volume of // cuboid with given sum of sides using System; class GFG { // Return the maximum volume. static int maxvolume(int s) { int maxvalue = 0; // for length for (int i = 1; i <= s - 2; i++) { // for breadth for (int j = 1; j <= s - 1; j++) { // for height int k = s - i - j; // calculating maximum volume. maxvalue = Math.Max(maxvalue, i * j * k); } } return maxvalue; } // Driver function public static void Main () { int s = 8; Console.WriteLine(maxvolume(s)); } } // This code is contributed by vt_m.
PHP
<?php // PHP code to Maximize volume of // cuboid with given sum of sides // Return the maximum volume. function maxvolume( $s) { $maxvalue = 0; // for length for ( $i = 1; $i <= $s - 2; $i++) { // for breadth for ( $j = 1; $j <= $s - 1; $j++) { // for height $k = $s - $i - $j; // calculating maximum volume. $maxvalue = max($maxvalue, $i * $j * $k); } } return $maxvalue; } // Driver Code $s = 8; echo(maxvolume($s)); // This code is contributed by vt_m. ?>
Javascript
<script> // javascript code to Maximize volume of // cuboid with given sum of sides // Return the maximum volume. function maxvolume( s) { let maxvalue = 0; // for length for (let i = 1; i <= s - 2; i++) { // for breadth for (let j = 1; j <= s - 1; j++) { // for height let k = s - i - j; // calculating maximum volume. maxvalue = Math.max(maxvalue, i * j * k); } } return maxvalue; } // Driver code let s = 8; document.write(maxvolume(s)); // This code is contributed by gauravrajput1 </script>
Producción :
18
Complejidad de tiempo: O(n 2 )
Espacio auxiliar: O(1)
Método 2: (Enfoque eficiente)
La idea es dividir los bordes lo más equitativamente posible.
Entonces,
largo = piso(s/3)
ancho = piso((s – largo)/2) = piso((s – piso(s/3)/2)
alto = s – largo – ancho = s – piso(s /3) – piso((s – piso(s/3))/2)
A continuación se muestra la implementación de este enfoque:
C++
#include <bits/stdc++.h> using namespace std; // Return the maximum volume. int maxvolume(int s) { // finding length int length = s / 3; s -= length; // finding breadth int breadth = s / 2; // finding height int height = s - breadth; return length * breadth * height; } // Driven Program int main() { int s = 8; cout << maxvolume(s) << endl; return 0; }
Java
// Java code to Maximize volume of // cuboid with given sum of sides import java.io.*; class GFG { // Return the maximum volume. static int maxvolume(int s) { // finding length int length = s / 3; s -= length; // finding breadth int breadth = s / 2; // finding height int height = s - breadth; return length * breadth * height; } // Driven Program public static void main (String[] args) { int s = 8; System.out.println ( maxvolume(s)); } } // This code is contributed by vt_m.
Python3
# Python3 code to Maximize volume of # cuboid with given sum of sides # Return the maximum volume. def maxvolume( s ): # finding length length = int(s / 3) s -= length # finding breadth breadth = s / 2 # finding height height = s - breadth return int(length * breadth * height) # Driven Program s = 8 print( maxvolume(s) ) # This code is contributed by "Sharad_Bhardwaj".
C#
// C# code to Maximize volume of // cuboid with given sum of sides using System; class GFG { // Return the maximum volume. static int maxvolume(int s) { // finding length int length = s / 3; s -= length; // finding breadth int breadth = s / 2; // finding height int height = s - breadth; return length * breadth * height; } // Driven Program public static void Main () { int s = 8; Console.WriteLine( maxvolume(s)); } } // This code is contributed by vt_m.
PHP
<?php // Return the maximum volume. function maxvolume($s) { // finding length $length = (int)($s / 3); $s -= $length; // finding breadth $breadth = (int)($s / 2); // finding height $height = $s - $breadth; return $length * $breadth * $height; } // Driven Code $s = 8; echo(maxvolume($s)); // This code is contributed by Ajit. ?>
Javascript
<script> // Return the maximum volume. function maxvolume( s) { // finding length let length = parseInt(s / 3); s -= length; // finding breadth let breadth = parseInt(s / 2); // finding height let height = s - breadth; return length * breadth * height; } // Driven Program let s = 8; document.write(maxvolume(s)); // This code is contributed by aashish1995 </script>
Producción :
18
Complejidad de Tiempo: O(1)
Espacio Auxiliar: O(1)
¿Cómo funciona esto?
Básicamente necesitamos maximizar el producto de
tres números, x, y y z cuya suma está dada.
Dado s = x + y + z
Maximizar P = x * y * z
= x * y * (s – x – y)
= x*y*s – x*x*s – x*y*y
Obtenemos dp/ dx = sy – 2xy – y*y
y dp/dy = sx – 2xy – x*x
Obtenemos dp/dx = 0 y dp/dy = 0 cuando
x = s/3, y = s/3
Entonces z = s – x – y = s/3
Sugiera si alguien tiene una mejor solución que sea más eficiente en términos de espacio y tiempo.
Este artículo es una contribución de Aarti_Rathi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.