根据总数确定案件数量(4,6,12)

时间:2012-04-29 13:53:52

标签: php function math

我有一个购物车的物品,我可以运送物品,如果我可以让他们进入4,6或12均匀,没有留下的情况。我想我已经明白了,但是如果我的购物车有8件物品,我的代码失败了,因为它找出1 6,剩下2个而不是计算它可以在2个4包中工作。 8当然不是唯一可以导致我失败的数字,而是它的一个例子。我怎样才能让我的代码能够直接解决这个问题?下面是我现在所拥有的,我仍然最终得到$和$ qTY var中的金额作为失败的例子。

$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个案例,但如果我不能按顺序这样做4个案例(8个购物车)2个案例或者6个案例6个案例和4个案例(22个购物车)等。

1 个答案:

答案 0 :(得分:4)

这不是完全不必要的,假设您只想知道是否可以交付项目(没有关于如何分区包的信息)?在这种情况下,它很容易: 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;
}