Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 涉及不可靠硬币数组的递归_Ruby_Arrays_Recursion - Fatal编程技术网

Ruby 涉及不可靠硬币数组的递归

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

这是给我的提示:

卡特西尔瓦式的货币是一件奇怪的事情:他们每个人都有一枚硬币 面额(包括零!)。银行里一台摇摇晃晃的兑换机 Catsylvania接受任何价值为N的硬币并返回3枚新硬币, 取值为N/2、N/3和N/4(四舍五入)

编写一个方法
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