У меня есть три типа монет: 5 центов, 15 центов, 30 центов. Количество этих монет n5, n15, n30.
Тогда кто-то спросит у меня число x (например, x = 55).
Мне нужно объединить эти монеты и дать ему набор монет (каждый тип меньше n5, n15, n30)
Вот требование
должен удовлетворить, как спросить 7, я должен предложить 2 5cent.
Минимальные потери, как спросите 23, мне нужно дать 1 15 центов и 2 5 центов вместо 1 30 центов
от общей суммы предлагаемых монеты должны быть минимальными, как спросите 20, я должен дать 1 15 центов и 1 5 центов вместо 4 5 центов
Я считаю, как показано ниже:
function useCard(totalMinutes, card30, card15, card5)
if card30 * 30 + card15*15 + card5*5 <= totalMinutes then
return card30, card15, card5
end
local used30 = 0
local used15 = 0
local used5 = 0
while totalMinutes > 30 and card30 > 0 do
card30 = card30 - 1
used30 = used30 + 1
totalMinutes = totalMinutes - 30
end
if card15 * 15 + card5 * 5 <= totalMinutes then
return used30 + 1, 0, 0
end
while totalMinutes > 15 and card15 > 0 do
card15 = card15 - 1
used15 = used15 + 1
totalMinutes = totalMinutes - 15
end
if card5 * 5 < totalMinutes then
return used30, used15 + 1, 0
end
while totalMinutes > 5 do
card5 = card5 - 1
used5 = used5 + 1
totalMinutes = totalMinutes - 5
end
return used30, used15, used5
end
после выполнения это, я должен изменить 5 центов на 15 центов, если это возможно, и изменить 5 центов + 15 центов на 30 центов, если это возможно.
Это правильно, или есть какой-то общий путь. А что, если монеты 5 центов 17 центов 31 цент ... спасибо