【发布时间】:2015-01-27 23:13:15
【问题描述】:
所以我有点难为你了。我需要编写一个函数,该函数接受一个数字(称为 K)并输出 n 个数字,如果这些数字 == K,则总和。
例如,如果我给这个函数 (100,3) 它将输出 [1,2,97], [1,3,96], [1,4,95]... [97,1, 2]
我已经计算出三位数的函数:
k = 100
r = []
0.upto(k/2) do |a|
(a+1).upto(k/2) do |b|
c = k-(a+b)
r << [a,b,c]
end
end
如何编写这个需要 n 位数的函数?
【问题讨论】:
-
如果您不要求解决方案是唯一的(除了订单),那么您所拥有的就不会真正起作用。您显示的
[97,1,2]示例解决方案不能与您拥有的循环一起发生。前两个加数的最大值为50。而且你的要求不明确。它应该输出所有个可能的加数组合吗?加数是否必须大于 0? -
确认,你完全正确。这是为了找到加起来为 k 的唯一附加项。
-
有无限多的数字加起来等于任何给定的数字。你想一一列举吗?
-
目标是找到 N 个加起来为 k 的唯一加数。
-
如果您希望有一个有限的解决方案,您将需要添加一些约束。您忽略的最可能的约束是加数必须全部 >= 0,即不允许负数。
标签: ruby function loops math nested