我有一辆装满物品的购物车,如果我能把它们均匀地装入4个、6个或12个的箱子里,而没有剩余的话,我就可以发货。我想我已经弄清楚了,但是如果我的购物车有8件商品,我的代码失败了,因为它计算出16件剩下2件,而不是uut,它可以在24包中工作。当然,8不是唯一可能导致我失败的数字,但这只是一个例子。我如何让我的代码正确地解决这个问题呢?下面是我现在所拥有的,我仍然在$qTY变量中以8作为失败的例子。
$num12s = $tQTY / 12;
$num12s = explode(".", $num12s);
$numCases = $num12s[0];
if($num12s[0] >= 1){
$doSub = $num12s[0] * 12;
$tQTY = $tQTY - $doSub;
}
$num6s = $tQTY / 6;
$num6s = explode(".", $num6s);
$numCases = $numCases + $num6s[0];
if($num6s[0] >= 1){
$doSub = $num6s[0] * 6;
$tQTY = $tQTY - $doSub;
}
$num4s = $tQTY / 4;
$num4s = explode(".", $num4s);
$numCases = $numCases + $num4s[0];
if($num4s[0] >= 1){
$doSub = $num4s[0] * 4;
$tQTY = $tQTY - $doSub;
}我需要首先填充一个12的箱子,如果我不能这样做,我需要填充一个6的箱子,如果我不能这样做,我需要填充一个4的箱子,但如果我不能这样做,那么2箱4(对于8的购物车)就可以了,或者一个12的箱子,一个6的箱子和一个4的箱子(对于22的购物车),等等。
发布于 2012-04-29 22:09:34
假设您只想知道是否可以交付项目(没有关于如何划分包的信息),那么这不是完全没有必要的吗?在这种情况下,这非常简单: evey偶数>=4可以工作,所以它只是:
$possible = ($number>=4 && $number%2==0);编辑:
如果您还需要更多关于打包的详细信息,我将创建一些类似以下内容的函数(see it working on codepad):
/*
* determines if the given number of items is deliverable or not.
*/
function delivery_possible($number_of_items){
return ($number_of_items>=4 && $number_of_items%2==0);
}
/*
* returns an array containing a counter for each package-size given
* the number of items. returns false if it can't be solved without
* leaving a rest.
*/
function delivery_packages($number_of_items){
if(!delivery_possible($number_of_items)){
return false; //impossibru!!!
}
$r = array('size4'=>0, 'size6'=>0, 'size12'=>0);
$r['size12'] = $number_of_items%12==0?(int)($number_of_items/12):(int)(($number_of_items-4)/12);
$number_of_items -= $r['size12']*12;
$r['size6'] = $number_of_items%6==0?(int)($number_of_items/6):(int)(($number_of_items-4)/6);
$number_of_items -= $r['size6']*6;
$r['size4'] = (int)($number_of_items/4);
return $r;
}https://stackoverflow.com/questions/10372634
复制相似问题