Maximizar el volumen del cuboide con la suma dada de lados

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.
 

Publicación traducida automáticamente

Artículo escrito por anuj0503 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *