嵌套每个循环不起作用

时间:2014-03-15 23:33:14

标签: ruby

我正在Project Euler处理问题以获得一些Ruby经验。我现在正在处理的问题是让我查看一个1000位的数字,并查找具有最佳产品的五个连续数字的序列。

big_num = //1000-digit number
num_array = big_num.split('').map(&:to_i)
biggest = 0
prod = 1

(0..995).each do |x|
 (0..4).each do |y|
   prod *= num_array[x+y]
 end
 biggest = prod if prod > biggest
 prod = 0
end

puts biggest

这给了我882,这是不正确的。为了找到问题,我让它为每次迭代打印x和y的值。在第一次迭代之后,它总是将y的五个值打印为7,3,1,6,7,当它们全部相乘时,等于882.因此,在外部循环的第一次迭代之后,它不会超过前五个值num_array的{​​{1}},即使x似乎正在递增。对于我的生活,我无法弄清楚它为什么会这样表现。

2 个答案:

答案 0 :(得分:3)

我会使用漂亮的Enumerable方法each_cons()来获取连续数字的所有序列,从而消除外部循环。其次,我会使用reduce(:*)来获取每个产品,从而消除内循环。最后,我会打电话给.max以获得答案。

num_array.each_cons(5).map{|seq| seq.reduce(:*)}.max

Voilà,单行。

答案 1 :(得分:1)

您必须使用1而不是0重新初始化prod