好无生趣,看了人家的算法,就自己动手写写吧。
public function change()
{
// 可用余额 面值及数量
$arrBalance = [
1 => 100,
2 => 10,
5 => 4,
10 => 3,
50 => 0
];
// 需要找零的值
$res = $money = 89;
// 排序 从面值大的开始
krsort($arrBalance);
$arrReturn = [];
$tmp = array_keys($arrBalance);
while ($one = array_shift($tmp)) {
if ($one <= $money) {
$nums = floor($money / $one);
$nums = $arrBalance[$one] >= $nums ? $nums : $arrBalance[$one];
$money -= $nums * $one;
// 更新可用量
$arrBalance[$one] -= $nums;
}
$arrReturn[$one.'元'] = $nums.'张';
if ($money == 0) {
break;
}
}
if ($money > 0) {
echo '换零失败';
exit;
}
echo $res.'找零方案:'.PHP_EOL;
print_r($arrReturn);
}