告诉我们如何换取这笔钱。一些例子:
> chafor(25)
{qa: 1}
> chanfor(41)
{qua: 1, dim: 1, nick: 1, pen: 1}
我试过
def chanfor(n)
while n!= 1
if n/25
{ q: 1}
...
end
答案 0 :(得分:2)
让我们以Ruby的方式做到这一点。我们将避免for / next / while循环,而是我们创建一个起始Hash并对其进行迭代以生成结果Hash:
class Change
COIN_VALUES = {quarter: 25, dime: 10, nickel: 5, penny: 1}
def self.change_for(cents)
pairs = COIN_VALUES.map do |coin, value|
number_of_coins = cents / value
cents = cents % value
[coin, number_of_coins]
end
pairs.to_h
end
end
>> Change.change_for(44)
#> {:quarter=>1, :dime=>1, :nickel=>1, :penny=>4}
>> Change.change_for(116)
#> {:quarter=>4, :dime=>1, :nickel=>1, :penny=>1}
>> Change.change_for(77)
#> {:quarter=>3, :dime=>0, :nickel=>0, :penny=>2}
让我们一步一步地走过逻辑:
首先,我们定义一个常量,如变量名称(COIN_VALUES
)所示。
接下来,我们将使用Enumerable#map
迭代该常量。这将允许我们分别处理每个键/值对,对它们执行操作,并从这些操作返回一个数组。
cents
变量存储剩余分数。我们使用整数除法来获得表示当前硬币的硬币数量的最高整数,然后取模数来确定执行该操作后剩余多少美分。
当我们完成时,我们有一个包含两个元素阵列的数组,我们存储在pairs
中。如果cents
为44,则显示如下:
[[:quarter, 1], [:dime, 1], [:nickel, 1], [:penny, 4]]
返回pairs.to_h
后,我们将pairs
转换为哈希:
{quarter: 1, dime: 1, nickel: 1, penny: 4}