该函数接受输入的“变化”,并返回要退还给客户的四分之一硬币,硬币,镍币和几美分的细分。
我的做法:假设零钱是0.62美元
虽然我可以轻松地遍历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."
}
答案 0 :(得分:0)
我相信这样做不会循环。
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
quarters = Int(totalChange/coinTray[0])
totalChange = totalChange.truncatingRemainder(dividingBy: coinTray[0])
dimes = Int(totalChange/coinTray[1])
totalChange = totalChange.truncatingRemainder(dividingBy: coinTray[1])
nickels = Int(totalChange/coinTray[2])
totalChange = totalChange.truncatingRemainder(dividingBy: coinTray[2])
pennies = Int(totalChange * 100)
return "You should have \(quarters) quarter(s), \(dimes) dime(s), \(nickels) nickel(s), and \(pennies) penny/ies."
}
编辑:好像OP想要这个答案。
var coinTray: [Double] = [0.25, 0.10, 0.05, 0.01]
var quarters = 0
var dimes = 0
var nickels = 0
var pennies = 0
var coins = [quarters, dimes, nickels, pennies]
func breakDown(change: Double) -> String {
var totalChange = change
for i in 0..<coinTray.count {
coins[i] = Int(totalChange/coinTray[i])
totalChange = totalChange.truncatingRemainder(dividingBy: coinTray[i])
}
return "You should have \(quarters) quarter(s), \(dimes) dime(s), \(nickels) nickel(s), and \(pennies) penny/ies."
}