我试图找到数字N的因子。我希望能够遍历我的素数数组,并且当条件满足时,返回到迭代的开始,而不是继续。< / p>
arrFactors = []
N = 150
[2,3,5,7,11].each do |a|
if N % a == 0
arrFactors.push(a)
N = N/a
break if N == 1
<return to start of the collection [2,3,5,7,11]>
end
end
我如何在Ruby 1.8.6中执行此操作? (我注意到1.8.7中有一个“循环”枚举器可能会相关吗?)
P.S
我知道下面的算法还不完善(我想我需要提供N = 1)。我也知道Ruby提供了一种保理方法,但我不想使用'因为我在这里学习。
答案 0 :(得分:2)
[2,3,5,7,11].each do |a|
while N % a == 0
arrFactors.push(a)
N = N/a
end
if N == 1 then
break
end
end
这将消除重置外循环的需要。
答案 1 :(得分:2)
您可以考虑使用Array.each
方法,而不是使用Array.select
方法。此方法接受一个块,并返回一个只包含与您的逻辑匹配的项的新数组。如果您的块返回true
,那么该项将包含在结果集中。以下代码使用select
方法并执行您要查找的内容:
[2,3,5,7,11].select do |a|
if N % a == 0
N = N/a
break if N == 1
return true
end
return false
end
可以找到select
方法的文档here。
答案 2 :(得分:1)
“redo”重置循环循环的当前迭代。 “重试”将开始循环。
(哦,“N”是常数;应该是“n”。)
答案 3 :(得分:0)
你可以试试这个
n = 150
factors = [2,3,5,7,11]
arrFactors = []
factor_index = 0
while ((factors.size > factor_index + 1) || n > 1) do
factors.each_with_index { |f, i|
factor_index = i
if (n % f) == 0
arrFactors.push(f)
n = n / f
break
end
}
end
puts n
puts arrFactors