Ruby 涉及不可靠硬币数组的递归
这是给我的提示: 卡特西尔瓦式的货币是一件奇怪的事情:他们每个人都有一枚硬币 面额(包括零!)。银行里一台摇摇晃晃的兑换机 Catsylvania接受任何价值为N的硬币并返回3枚新硬币, 取值为N/2、N/3和N/4(四舍五入) 编写一个方法Ruby 涉及不可靠硬币数组的递归,ruby,arrays,recursion,Ruby,Arrays,Recursion,这是给我的提示: 卡特西尔瓦式的货币是一件奇怪的事情:他们每个人都有一枚硬币 面额(包括零!)。银行里一台摇摇晃晃的兑换机 Catsylvania接受任何价值为N的硬币并返回3枚新硬币, 取值为N/2、N/3和N/4(四舍五入) 编写一个方法wonky_coins(n),返回您需要的硬币数量 如果你把所有的非零硬币都拿走并继续喂它们,它们就剩下了 回到机器里,直到你只剩下零值硬币 难度:3/5 describe "#wonky_coins" do it "handles a simple c
wonky_coins(n)
,返回您需要的硬币数量
如果你把所有的非零硬币都拿走并继续喂它们,它们就剩下了
回到机器里,直到你只剩下零值硬币
难度:3/5
describe "#wonky_coins" do
it "handles a simple case" do
wonky_coins(1).should == 3
end
it "handles a larger case" do
wonky_coins(5).should == 11
# 11
# => [2, 1, 1]
# => [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
# => [[[0, 0, 0], 0, 0], [0, 0, 0], [0, 0, 0]]
end
it "handles being given the zero coin" do
wonky_coins(0).should == 1
end
end
也许是因为给定的测试涉及阵列,但我无法摆脱它们!因此,到目前为止,我的解决方案如下:
def wonky_coins(n)
arr = []
arr << n/2 << n/3 << n/4
#base case?
if arr.all?{|coin| coin == 0}
return arr.flatten.length
else
arr.map{|x| wonky_coins(x)}
end
end
p wonky_coins(5)
def摇摇晃晃的硬币(n)
arr=[]
arr以下是代码运行时显示的内容:
def wonky_coins(n)
arr = [] # => [], [], [], [], [], [], []
arr << n/2 << n/3 << n/4 # => [2, 1, 1], [1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]
#base case?
if arr.all?{|coin| coin == 0} # => false, false, true, true, true, true, true
return arr.flatten.length # => 3, 3, 3, 3, 3
else
arr.map{|x| wonky_coins(x)} # => [3, 3, 3], [[3, 3, 3], 3, 3]
end
end
p wonky_coins(5) # => [[3, 3, 3], 3, 3]
# >> [[3, 3, 3], 3, 3]
def摇摇晃晃的硬币(n)
arr=[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]
arr 3,3,3,3,3
其他的
arr.map{| x |摇摇晃晃的硬币(x)}}=>[3,3,3],[3,3,3],3,3]
结束
结束
摇摇晃晃的硬币(5)#=>[3,3,3,3]
# >> [[3, 3, 3], 3, 3]
“眼见为实”是一个很好的工具,可以帮助挖掘代码中的奇怪之处。这太神奇了!!非常感谢!这是因为在递归循环的基本情况下,您正在展平并获取数组的长度。所以[0,0,0]>3。。。。也会在最后一次测试中失败,不可靠的硬币(0)。应该==1