首页 > 解决方案 > 在单个循环中更新多个累加器时遇到问题

问题描述

这是一个接受输入“更改”的函数,并返回有多少 25 美分硬币、5 美分硬币、5 美分硬币和几美分硬币要返还给客户的明细。

我的方法:假设零钱是 0.62 美元

  1. 检查是变化>宿舍。如果是,减去 0.25 美元。每次减去四分之一时,将四分之一累加器加 1。重复直到不能再从剩余的变化值中减去四分之一。(这应该导致 2 个季度)
  2. 此步骤后剩余的零钱为 0.12 美元
  3. 移动到一角钱 - 每次从零钱中减去一角钱,将 1 加到一角钱的累加器上
  4. 重复五分钱和便士

虽然我可以轻松地遍历 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."

}

标签: arraysswiftfunction

解决方案


我相信这在没有循环的情况下做同样的事情。

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."
}

推荐阅读