我正在处理一些数据,这些数据提供的付款方式是其数值之和。付款方式是:
2 Visa
4 Mastercard
8 American Express
16 Discover
32 Diners
64 Cash
128 Check
256 Debit
因此,如果接受Visa和万事达卡,则价值为6.如果接受Visa,Mastercard和Discover,则为22。
我认为解决这个问题的一种方法是提出一系列所有可能的总和,其中总和是索引,用于构成该总和的支付方法是该索引的数组。例如:
$methods = array(
2 => array(
2 => 'Visa'
),
4 => array(
4 => 'Mastercard'
),
6 => array(
2 => 'Visa',
4 => 'Mastercard'
),
8 => array(
8 => 'American Express'
),
10 => array(
2 => 'Visa',
8 => 'American Express'
)
);
等等,把它放到一个文件中,然后我要做的就是指定$ methods [10]并获得Visa和Amex的数组。
我的另一部分认为支付方法本身可以放入一个数组中,并且可以使用公式进行动态计算。如果可能的话,我更喜欢这种方式,但我无法理解。一个简单的:
$methods = paymentMethods(10);
如何解决只有工作总额的问题,以及确定使用哪些价值(付款方式)来创造这笔金额?
答案 0 :(得分:1)
这应该大致有效,我没有时间自己测试,如果有问题,请不要犹豫评论(这里$cards
是付款方式的一系列问题的开头)。
<?php
function methods($n) {
global $cards;
$k = closest_to($n);
$r = $n - $k;
if ($r != 0) {
return array($k => $cards[$k]) + methods($r);
} else {
return array($k => $cards[$k]);
}
}
function closest_to($n) {
global $cards;
$prevK = null;
foreach ($cards as $k => $v) {
if ($k > $n) {
return $prevK;
}
$prevK = $k;
}
end($cards);
return key($cards);
}