arrays - 在单个循环中更新多个累加器时遇到问题
问题描述
这是一个接受输入“更改”的函数,并返回有多少 25 美分硬币、5 美分硬币、5 美分硬币和几美分硬币要返还给客户的明细。
我的方法:假设零钱是 0.62 美元
- 检查是变化>宿舍。如果是,减去 0.25 美元。每次减去四分之一时,将四分之一累加器加 1。重复直到不能再从剩余的变化值中减去四分之一。(这应该导致 2 个季度)
- 此步骤后剩余的零钱为 0.12 美元
- 移动到一角钱 - 每次从零钱中减去一角钱,将 1 加到一角钱的累加器上
- 重复五分钱和便士
虽然我可以轻松地遍历 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."
}
解决方案
我相信这在没有循环的情况下做同样的事情。
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."
}
推荐阅读
- regex - 使用正则表达式匹配使用 netstat -nb python 的进程名称
- .net-core - VSTS - dotnet restore - PackageCache 不存在
- bash - 将 API 转换为 HTTPS 后 pwd 命令返回“/”
- swift3 - 简单的活动跟踪器 Swift 代码
- javascript - 使用 for 循环反转数组
- wordpress - 如何在 docker-compose.yml 中运行 wp cli
- android - 获取已安装应用程序的列表,不包括内置应用程序
- android - 通话结束后获取来电者电话号码然后开始活动
- php - 在 AJAX 发送的 PHP 文件中重用数据库连接 (PDO)
- graph-theory - 如何计算具有 5 个顶点的图形的直径?