Dynami c Программирование: минимальные потери и минимальное количество - PullRequest
0 голосов
/ 24 марта 2020

У меня есть три типа монет: 5 центов, 15 центов, 30 центов. Количество этих монет n5, n15, n30.

Тогда кто-то спросит у меня число x (например, x = 55).

Мне нужно объединить эти монеты и дать ему набор монет (каждый тип меньше n5, n15, n30)

Вот требование

  1. должен удовлетворить, как спросить 7, я должен предложить 2 5cent.

  2. Минимальные потери, как спросите 23, мне нужно дать 1 15 центов и 2 5 центов вместо 1 30 центов

  3. от общей суммы предлагаемых монеты должны быть минимальными, как спросите 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 цент ... спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...