2016-09-29 427 views
0

因为我是初学Ruby开发人员。我想知道更多高级Ruby开发人员能够解决这个问题。我在这里寻找最小的数字,除以1到10的数字而没有任何余数。如何计算数字1至10的最小公倍数?

更正式地说,这是数字1定义为两个或多个整数的最小公倍数,在这种情况下,以10

我当前的尝试:

max_divider = 10 
nums = (1..max_divider).to_a 
found_count = 0 
x = 0 
while found_count == 0 
    x += 1 
    nums.each do |num| 
    if x % num == 0 
     found_count += 1 
    end 
    end 

    if found_count != max_divider 
    found_count = 0 
    end 
end 

p x #=> 2520 
+0

你应该明确你的代码是否工作。如果它有效,我会建议发布到https://codereview.stackexchange.com。如果它不起作用,你应该解释为什么你认为它不起作用。 –

+0

既然你问过其他开发者会怎么做:Ruby开发人员几乎总是缩进两个空格。 –

+0

我不同意谁投票结束这个问题“太宽泛”。这真的很窄。 –

回答

7
MAX_DIVIDER = 10 
DIVIDERS = (1..MAX_DIVIDER) 

number = MAX_DIVIDER 
number += 1 until DIVIDERS.all? { |divider| number % divider == 0 } 
number #=> 2520 

你也可以使用lcm方法Integer#lcm这将帮助您找到最小公倍数。

DIVIDERS.reduce(:lcm) #=> 2520 
+2

'Range'在'Enumerable'中混合,不需要将其转换为'Array'。只要'(1..10).reduce(:lcm)#=> 2520'就够了。 –

+0

同样的事情适用于'any?',实际上,这也是'Enumerable'方法。 –

+1

你的循环应该是一个单行:'number + = 1,直到DIVIDERS.all? {| divider |数字%divider == 0}' –

相关问题