📌  相关文章
📜  将长方体分成多个立方体,以使体积总和最大

📅  最后修改于: 2021-04-29 12:42:24             🧑  作者: Mango

给定长方体的长度宽度高度。任务是将给定的长方体划分为最小数量的多维数据集,以使所有多维数据集的大小相同,并且多维数据集的体积之和最大。
例子:

Input : l = 2, b = 4, h = 6
Output : 2 6
A cuboid of length 2, breadth 4 and 
height 6 can be divided into 6 cube 
of side equal to 2.
Volume of cubes = 6*(2*2*2) = 6*8 = 48.
Volume of cuboid = 2*4*6 = 48.

Input : 1 2 3
Output : 1 6

首先,我们不允许浪费长方体的体积,因为我们要浪费最大体积的总和。因此,每一侧都应完全划分在所有多维数据集中。并且由于立方体的三个侧面中的每一个都相等,因此长方体的每一边都需要用相同的数字(例如x)整除,它将成为立方体的侧面。因此,我们必须最大化此x,该x将除以给定的长度,宽度和高度。仅当x是给定长度,宽度和高度的最大公约数时,该x才是最大值。因此,立方体的长度将是长度,宽度和高度的GCD。
现在,要计算立方体的数量,我们知道了长方体的总体积,并且可以找到一个立方体的体积(因为已经计算了边)。因此,立方体的总数等于(长方体的体积)/(立方体的体积),即(l * b * h)/(x * x * x)。
以下是此方法的实现:

C++
// CPP program to find optimal way to break
// cuboid into cubes.
#include 
using namespace std;
 
// Print the maximum side and no of cube.
void maximizecube(int l, int b, int h)
{
    // GCD to find side.
    int side = __gcd(l, __gcd(b, h));
 
    // dividing to find number of cubes.
    int num = l / side;
    num = (num * b / side);
    num = (num * h / side);
 
    cout << side << " " << num << endl;
}
 
// Driver code
int main()
{
    int l = 2, b = 4, h = 6;
 
    maximizecube(l, b, h);
    return 0;
}


Java
// JAVA Code for Divide cuboid into cubes
// such that sum of volumes is maximum
import java.util.*;
 
class GFG {
     
    static int gcd(int m, int n)
    {
        if(n == 0)
            return m;
        else if(n > m)
            return gcd(n,m);
        else
            return gcd(n, m % n);
    }
     
    // Print the maximum side and no
    //     of cube.
    static void maximizecube(int l, int b,
                                    int h)
    {
        // GCD to find side.
        int side = gcd(l, gcd(b, h));
      
        // dividing to find number of cubes.
        int num = l / side;
        num = (num * b / side);
        num = (num * h / side);
      
       System.out.println( side + " " + num);
    }
     
    /* Driver program  */
    public static void main(String[] args)
    {
         int l = 2, b = 4, h = 6;
         maximizecube(l, b, h);
    }
}
 
// This code is contributed by Arnav Kr. Mandal.


Python3
# Python3 code to find optimal way to break
# cuboid into cubes.
from fractions import gcd
 
# Print the maximum side and no of cube.
def maximizecube( l , b , h ):
 
    # GCD to find side.
    side = gcd(l, gcd(b, h))
     
    # dividing to find number of cubes.
    num = int(l / side)
    num = int(num * b / side)
    num = int(num * h / side)
     
    print(side, num)
 
# Driver code
l = 2
b = 4
h = 6
 
maximizecube(l, b, h)
 
# This code is contributed by "Sharad_Bhardwaj".


C#
// C# Code for Divide cuboid into cubes
// such that sum of volumes is maximum
using System;
 
class GFG {
     
    static int gcd(int m, int n)
    {
        if(n == 0)
            return m;
        else if(n > m)
            return gcd(n,m);
        else
            return gcd(n, m % n);
    }
     
    // Print the maximum side and no
    // of cube.
    static void maximizecube(int l, int b,
                                    int h)
    {
        // GCD to find side.
        int side = gcd(l, gcd(b, h));
     
        // dividing to find number of cubes.
        int num = l / side;
        num = (num * b / side);
        num = (num * h / side);
     
    Console.WriteLine( side + " " + num);
    }
     
    /* Driver program */
    public static void Main()
    {
        int l = 2, b = 4, h = 6;
        maximizecube(l, b, h);
    }
}
 
// This code is contributed by vt_m.


PHP
 $b)
        return __gcd($a - $b , $b ) ;
 
    return __gcd($a , $b - $a) ;
}
 
 
// Print the maximum side and no of cube.
function maximizecube($l, $b, $h)
{
     
    // GCD to find side.
    $side = __gcd($l, __gcd($b, $h));
 
    // dividing to find number of cubes.
    $num = $l / $side;
    $num = ($num * $b / $side);
    $num = ($num * $h / $side);
 
    echo $side , " " , $num ;
}
 
    // Driver code
    $l = 2;
    $b = 4;
    $h = 6;
    maximizecube($l, $b, $h);
     
// This code is contributed by anuj_67.
?>


Javascript


输出:

2 6