Это функция, которая принимает входные «изменения» и возвращает разбивку того, сколько четвертей, центов, никелей и пенни отдать клиенту.
Мой подход: допустим, изменение составляет $ 0,62
- Проверьте это изменение> четверти. Если да, вычтите $ 0,25. Каждый раз, когда вычитается четверть, добавьте 1 к аккумулятору четверти. Повторяйте, пока четверти больше не могут быть вычтены из оставшегося значения изменения. (Это должно привести к 2 кварталам)
- Оставшееся изменение составляет $ 0,12 после этого шага
- Переход на десять центов - каждый раз, когда из суммы вычитается десять центов, добавляйте 1 к аккумулятору 10 центов
- Повтор для никелей и копеек
Хотя я могу легко перебирать массив coinTray и вычитать значения, как мне указать, что, как только массив переместится к следующему элементу, переключиться на следующий аккумулятор и начать добавлять к нему?
Я решил это здесь без использования цикла, но есть ли более эффективный способ сделать это?
func breakdown(change: Double) -> String {
var coinTray: [Double] = [0.25, 0.10, 0.05, 0.01]
var totalChange = change
var quarters = 0
var dimes = 0
var nickels = 0
var pennies = 0
while totalChange >= coinTray[0] {
totalChange -= coinTray[0]
quarters += 1
}
while totalChange >= coinTray[1] {
totalChange -= coinTray[1]
dimes += 1
}
while totalChange >= coinTray[2] {
totalChange -= coinTray[2]
nickels += 1
}
while totalChange >= coinTray[3] {
totalChange -= coinTray[3]
pennies += 1
}
return "You should have \(quarters) quarter(s), \(dimes) dime(s), \(nickels) nickel(s), and \(pennies) penny/ies."
}