【问题标题】:How to calculate the Least Common Multiple of the numbers 1 to 10?如何计算数字1到10的最小公倍数?
【发布时间】:2016-10-02 02:29:58
【问题描述】:

因为我是初学者 Ruby 开发人员。我想知道更高级的 Ruby 开发人员将如何解决这个问题。我在这里寻找除以 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

【问题讨论】:

  • 你应该清楚你的代码是否有效。如果可行,我建议发帖到codereview.stackexchange.com。如果它不起作用,您应该准确解释您认为它不起作用的原因。
  • 既然你问其他开发者会怎么做:Ruby 开发者几乎总是缩进两个空格。
  • 我不同意投票结束这个问题的人“过于宽泛”。真的很窄。

标签: ruby


【解决方案1】:
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

【讨论】:

  • Range 混入Enumerable,无需将其转换为Array。只需(1..10).reduce(:lcm) #=> 2520 就足够了。
  • any? 也一样,其实这也是一个Enumerable 方法。
  • 你的循环应该是单行的:number += 1 until DIVIDERS.all? { |divider| number % divider == 0 }
猜你喜欢
  • 1970-01-01
  • 2011-05-12
  • 2022-11-27
  • 1970-01-01
  • 2020-09-05
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多