<?php
/* Требуемая сумма */
$amount = 54500;
/* Запас наличных */
100 => 23,
500 => 5,
1000 => 0,
5000 => 200
);
/* Считаем сколько всего разных купюр */
$billsCount = count($bills);
/* Ищем самую мелкую купюру */
$firstBill = key($bills);
/* Проверяем, что требуемая сумма выше нуля */
if ($amount <= 0) {
echo "Выдача невозможна: требуемая сумма ниже нуля, либо равна ему";
}
/* Проверяем кратность требуемой суммы самой мелкой купюре */
if ($amount % $firstBill != 0) {
echo "Выдача невозможна : указана сумма не кратная $firstBill";
}
/* Переворачиваем массив, задаем значение $i и $totalAmount */
$i = 0;
$totalAmount = $amount;
/* Проверяем, хватает ли купюр */
foreach ($bills as $bill => $number) {
$numberOfBills = floor($totalAmount / $bill); if ($numberOfBills > $number) {
$numberOfBills = $number;
}
$totalAmount = $totalAmount - ($numberOfBills * $bill);
$i++;
if ($i == $billsCount && $totalAmount > 0) {
echo "Выдача невозможна: в банкомате недостаточно купюр";
}
}
echo "Выдача возможна, число купюр:\n";
/* Считаем сколько количество купюр для выдачи суммы и выводим его */
foreach ($bills as $bill => $number) {
$numberOfBills = floor($amount / $bill); if ($numberOfBills > $number) {
$numberOfBills = $number;
}
$amount = $amount - ($numberOfBills * $bill);
if ($numberOfBills == 0) {
continue;
}
echo "$numberOfBills".'x'."$bill ";
}
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgovKiDQotGA0LXQsdGD0LXQvNCw0Y8g0YHRg9C80LzQsCAqLwokYW1vdW50ID0gNTQ1MDA7CgovKiDQl9Cw0L/QsNGBINC90LDQu9C40YfQvdGL0YUgKi8KJGJpbGxzID0gYXJyYXkoCgkxMDAgPT4gMjMsCgk1MDAgPT4gNSwKCTEwMDAgPT4gMCwKCTUwMDAgPT4gMjAwCgkpOwoJCi8qINCh0YfQuNGC0LDQtdC8INGB0LrQvtC70YzQutC+INCy0YHQtdCz0L4g0YDQsNC30L3Ri9GFINC60YPQv9GO0YAgKi8KJGJpbGxzQ291bnQgPSBjb3VudCgkYmlsbHMpOwoJCi8qINCY0YnQtdC8INGB0LDQvNGD0Y4g0LzQtdC70LrRg9GOINC60YPQv9GO0YDRgyAqLyAKcmVzZXQoJGJpbGxzKTsKJGZpcnN0QmlsbCA9IGtleSgkYmlsbHMpOwoKLyog0J/RgNC+0LLQtdGA0Y/QtdC8LCDRh9GC0L4g0YLRgNC10LHRg9C10LzQsNGPINGB0YPQvNC80LAg0LLRi9GI0LUg0L3Rg9C70Y8gKi8KaWYgKCRhbW91bnQgPD0gMCkgewoJZWNobyAi0JLRi9C00LDRh9CwINC90LXQstC+0LfQvNC+0LbQvdCwOiDRgtGA0LXQsdGD0LXQvNCw0Y8g0YHRg9C80LzQsCDQvdC40LbQtSDQvdGD0LvRjywg0LvQuNCx0L4g0YDQsNCy0L3QsCDQtdC80YMiOwoJZXhpdCgpOwp9CgovKiDQn9GA0L7QstC10YDRj9C10Lwg0LrRgNCw0YLQvdC+0YHRgtGMINGC0YDQtdCx0YPQtdC80L7QuSDRgdGD0LzQvNGLINGB0LDQvNC+0Lkg0LzQtdC70LrQvtC5INC60YPQv9GO0YDQtSAqLwppZiAoJGFtb3VudCAlICRmaXJzdEJpbGwgIT0gMCkgewoJCWVjaG8gItCS0YvQtNCw0YfQsCDQvdC10LLQvtC30LzQvtC20L3QsCA6INGD0LrQsNC30LDQvdCwINGB0YPQvNC80LAg0L3QtSDQutGA0LDRgtC90LDRjyAkZmlyc3RCaWxsIjsKCQlleGl0KCk7Cn0KCi8qINCf0LXRgNC10LLQvtGA0LDRh9C40LLQsNC10Lwg0LzQsNGB0YHQuNCyLCDQt9Cw0LTQsNC10Lwg0LfQvdCw0YfQtdC90LjQtSAkaSDQuCAkdG90YWxBbW91bnQgKi8KJGJpbGxzID0gYXJyYXlfcmV2ZXJzZSgkYmlsbHMsIHRydWUpOwokaSA9IDA7CiR0b3RhbEFtb3VudCA9ICRhbW91bnQ7CgovKiDQn9GA0L7QstC10YDRj9C10LwsINGF0LLQsNGC0LDQtdGCINC70Lgg0LrRg9C/0Y7RgCAqLwpmb3JlYWNoICgkYmlsbHMgYXMgJGJpbGwgPT4gJG51bWJlcikgewoJJG51bWJlck9mQmlsbHMgPSBmbG9vcigkdG90YWxBbW91bnQgLyAkYmlsbCk7CglpZiAoJG51bWJlck9mQmlsbHMgPiAkbnVtYmVyKSB7CgkJJG51bWJlck9mQmlsbHMgPSAkbnVtYmVyOwoJfQoJJHRvdGFsQW1vdW50ID0gJHRvdGFsQW1vdW50IC0gKCRudW1iZXJPZkJpbGxzICogJGJpbGwpOwoJJGkrKzsKCWlmICgkaSA9PSAkYmlsbHNDb3VudCAmJiAkdG90YWxBbW91bnQgPiAwKSB7CgkJZWNobyAi0JLRi9C00LDRh9CwINC90LXQstC+0LfQvNC+0LbQvdCwOiDQsiDQsdCw0L3QutC+0LzQsNGC0LUg0L3QtdC00L7RgdGC0LDRgtC+0YfQvdC+INC60YPQv9GO0YAiOwoJCWV4aXQoKTsKCX0KfQoKZWNobyAi0JLRi9C00LDRh9CwINCy0L7Qt9C80L7QttC90LAsINGH0LjRgdC70L4g0LrRg9C/0Y7RgDpcbiI7CgovKiDQodGH0LjRgtCw0LXQvCDRgdC60L7Qu9GM0LrQviDQutC+0LvQuNGH0LXRgdGC0LLQviDQutGD0L/RjtGAINC00LvRjyDQstGL0LTQsNGH0Lgg0YHRg9C80LzRiyDQuCDQstGL0LLQvtC00LjQvCDQtdCz0L4gKi8KZm9yZWFjaCAoJGJpbGxzIGFzICRiaWxsID0+ICRudW1iZXIpIHsKCSRudW1iZXJPZkJpbGxzID0gZmxvb3IoJGFtb3VudCAvICRiaWxsKTsKCWlmICgkbnVtYmVyT2ZCaWxscyA+ICRudW1iZXIpIHsKCQkkbnVtYmVyT2ZCaWxscyA9ICRudW1iZXI7Cgl9CgkkYW1vdW50ID0gJGFtb3VudCAtICgkbnVtYmVyT2ZCaWxscyAqICRiaWxsKTsKCWlmICgkbnVtYmVyT2ZCaWxscyA9PSAwKSB7CgkJY29udGludWU7Cgl9CgllY2hvICIkbnVtYmVyT2ZCaWxscyIuJ3gnLiIkYmlsbCAiOwp9