代码之家  ›  专栏  ›  技术社区  ›  PreciousBodilyFluids

在Ruby中查找回文数

  •  2
  • PreciousBodilyFluids  · 技术社区  · 15 年前

    所以,我正在做Euler项目来巩固我的Ruby技能。我遇到了问题4,上面写着:

    回文数字的读数相同 从两个2位数的乘积 数字是9009=91*99。

    查找由 两个三位数字的乘积。

    首先,我试图使用第一段中的信息验证我的代码。我将回文函数定义为:

    def palindrome?(blah)
      string = blah.to_s
      string.reverse == string
    end
    

    array = (90..99).to_a
    array = array.map{|u| array.map{|y| u*y}}
    array = array.sort
    array = array.select{|u| palindrome?(u)}
    puts array
    

    程序没有输出任何东西。如果我这样做:

    array = (90..99).to_a
    array = array.map{|u| array.map{|y| u*y}}
    array = array.sort
    #array = array.select{|u| palindrome?(u)}
    puts array
    

    我得到一长串未排序的四位数字,所以我猜它忽略了排序。最后,如果我只是这样做:

    #array = (90..99).to_a
    #array = array.map{|u| array.map{|y| u*y}}
    #array = array.sort
    
    array = [7447, 9009, 3551, 2419]
    array = array.select{|u| palindrome?(u)}
    puts array
    

    4 回复  |  直到 10 年前
        1
  •  2
  •   Rishav Rastogi    15 年前

    你可以用这样的东西

     new_arr = array.inject([]) { |a,u| a += array.map { |y| u*y } }
    
    

      array = array.map{|u| array.map{|y| u*y}}
    

    它返回嵌套的“[[8100,…],[],[]]”类型的数组。这就是你的代码不起作用的原因

        2
  •  3
  •   RichN    15 年前

    你的这一行

    array = array.map{|u| array.map{|y| u*y}}
    

    返回一个嵌套数组,您应该展开它。

    1. 您需要删除重复项

    提示:

        3
  •  1
  •   Community CDub    4 年前

    This looks more understandable:-

    #Steps
        # Define a method for palindrome
        # List out all 3-digit numbers
        # Multiply each numbers by each numbers
        # List out all palindrome numbers
        # Choose the largest (max) palindrome number
    
        def is_a_palindrome?(n)
            n == n.to_s.reverse.to_i
        end
        
        def problem_four
            palindrome = [ ]
            array = 111.upto(999)
            array.each do |x|
                array.each do |y|
                    multiply = x * y
                    if is_a_palindrome?(multiply)
                        palindrome << multiply
                    end
                end 
            end
            palindrome.max
        end
        
        puts problem_four
        
        #$ ruby problem_four.rb
            #906609
    
        4
  •  0
  •   Abdul Baig    10 年前

    查找由两个3位数字的乘积构成的最大回文。

    我已经提出了这个解决方案,我希望这将帮助一些新手

    to=999
    from=100
    palindromes=[]
    for i in from..to do
        for j in 1..to do
            k=i*j
            palindromes << k if k.to_s==k.to_s.reverse
        end
    end
    palindromes.max  #this will return 906609