三部分总重量50kg
每包最大重量的包裹为30 kg
汽车尾气重量为:20KG - 总量2 = 40KG
汽车交流发电机重量为:10KG - 总量1 = 10KG
所以这需要两个地块
包裹最大重量30千克包裹1 - 汽车排气&交流发电机(第一个包裹将需要1个排气20KG和1个交流发电机10KG来制造30KG)
包裹最大重量30公斤包裹2 - 汽车排气(第二个包裹将需要1排气20KG)
显示如下:
包裹编号||零件名称||零件数量||重量
1 ||汽车排气|| 1 || 20KG
1 ||交流发电机|| 1 || 10KG
2 ||汽车排气|| 1 || 20KG
需要php脚本这样显示
(评论/回答的代码)......
$nums = array( 20, 20, 10 );
sort($nums);
$i=0;
while($i<sizeof($nums)){
$b=3;
for ($k=1; $k < $b; $k++) {
dump($k);
}
die();
$a = $nums[$i]+$nums[$i+1]+$nums[$i+2];
if($a=30)
{
dump($a);
}
die();
dump($i);
if($i>=sizeof($nums)){
break;
}
echo "<br>";
$i=$i+1;
}
答案 0 :(得分:0)
这应该有效,你必须尝试确保,但代码中有评论可以告诉你它是如何工作的......
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$parts = [ [ 'desc' => 'Exhaust', 'weight' =>20],
['desc' => 'Car Exhaust2', 'weight' => 20],
['desc' => 'Alternator', 'weight' => 10]
];
$maxWeight = 30;
$parcels = [];
// Create first parcel
$parcels[] = ['weight' => 0, 'items' => []];
foreach ( $parts as $item ) {
$added = false;
// Look through all existing parcels
foreach ( $parcels as &$parcel ) {
// If there is enough space for this item - add to parcel
if ( $parcel['weight'] + $item['weight'] <= $maxWeight ) {
$parcel['weight'] += $item['weight'];
$parcel['items'][] = $item;
$added = true;
break;
}
}
// If there wasn't enough space in existing parcels, create a new one
if ( $added == false ) {
$parcels[] = ['weight' => $item['weight'], 'items' => [$item]];
}
}
print_r($parcels);
我已经扩展了项目数组以获得描述和权重,然后每个包裹都有其中项目的总权重和项目列表。
最大重量是一个变量,所以可以很容易地改变。
您需要尝试使用不同的项目,但它的功能相当简单。