【问题标题】:Division and Loops for Beginners初学者的除法和循环
【发布时间】:2013-03-28 21:35:58
【问题描述】:

谁能帮我弄清楚如何在 Ruby 中做到这一点?

我有一个整数数组。对于这些整数中的每一个,我需要找到一个两位数长的除数(整数也是如此)。现在,代码正在无限循环。我试图得到的答案是:

int_a = 2, int_b = 11, and x = 22

代码如下:

[22, 33].each do |x| 
  x.to_f
  int_a = 1
  int_b = x.quo(int_a)

     until int_a > 15 || int_b%2==0 && sprintf("%g", int_b).to_s.length == 2 
        puts "#{x}"
        puts "#{int_a}"
        puts "#{int_b}"  
     end  
  int_a += 1
 end

【问题讨论】:

  • 我在跟踪您的代码时遇到了问题,但您至少需要在 until 块内更改一些变量,否则您将永远无法退出它。也许您打算将int_a += 1 放在until 块内?
  • 将尝试。我基本上是在寻找两件事,我不知道如何简化它。我取数字 22,将其更改为浮点数,然后将其除以另一个数字(向上计数),直到乘积既是整数又是 2 位数。
  • 将 'until' 更改为 'if' 解决了循环问题。

标签: ruby loops recursion


【解决方案1】:

我看不懂你的代码,但根据你的定义:

对于这些整数中的每一个,我需要找到一个两位数长的除数(整数也是如此)

试试这个:

numbers = [22,33]
numbers.map do |n|
  raise "invalid number" if n < 10
  div = 10.0
  div += 1 while (n%div) != 0
  div
end
#result: [11,22]

【讨论】:

    【解决方案2】:

    作为@fotanus,我无法理解您的代码,但在回答您的问题时,我不久前使用此代码来查找除数:

    require 'prime'
    
    def divisors_for(n)
      n.prime_division.map do |n,mp|
        (0..mp).map { |i| n**i }
      end.inject([1]) do |a, factor_group|
        a.product(factor_group)
      end.map do |factors|
        factors.flatten.reduce(:*)
      end - [n]
    end
    
    [22, 23].map do |n|
      divisors_for(n).select { |d| d.to_s.size == 2 }
    end
    

    【讨论】:

    • 谢谢!我不知道有一个 prime_division 方法,这也很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2013-03-29
    • 2013-06-16
    • 2012-11-19
    • 2016-01-05
    • 2011-01-28
    相关资源
    最近更新 更多