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