计算静态数字与另一个数字相符的次数

时间:2015-01-12 10:38:57

标签: php math numbers calculator surface

对于表面计算,我正在寻找以下解决方案。

我有一个像60平方米的表面大小,这个方块我有2种 材料尺寸。材料尺寸为2平方米和4平方米。我现在面临的挑战是 尽可能有效地计算所需的材料并保持休息 材料的最低限度。

因此,尽可能用4平方米的材料填充60平方米的表面,并用2平方米的面积填充,以使材料保持最小。

2 个答案:

答案 0 :(得分:2)

很简单。使用此方法,您可以使用任意数量和任何大小的材料。

将您的材料存储到阵列中。在该数组上循环,进行计算,并存储"休息"在另一个变量中。如果最后会有一些休息,那么从最后一个项目再添加1个。

$materials = array(2,4,8);
$surface = 63;
rsort($materials);
$rest = $surface;
$isFinished = false;
$data = array();
foreach ($materials as $material) {
    $result = $rest / $material;
    if ($result >= 1) {
        $data[$material] = floor($result);
        $rest -= $material * floor($result);
    }
}

if ($rest > 0) {
    $data[end($materials)]++;
}
echo "For a " . $surface . " you need the following materials: <br />";
foreach ($data as $key => $val) {
    echo "Material " . $key . " * " . $val ."<br />";
}

输出是:

For a 63 you need the following materials:
Material 8 * 7
Material 4 * 1
Material 2 * 2

答案 1 :(得分:0)

假设您使用的是PHP 这将是开始以最少的休息时间找到材料。

function getMinRest($surface, $num1, $num2){
  $rest1 = $surface % $num1;
  $rest2 = $surface % $num2;
  return $rest2 <= $rest1 ? $num2:$num1;
}