Ruby 查找起始编号的最长collatz序列<;100

Ruby 查找起始编号的最长collatz序列<;100,ruby,algorithm,Ruby,Algorithm,最长拼贴顺序(100) 当我运行算法时,我被告知3a+1中有一个意外的标识符,并且程序没有运行。我的问题在哪里 谢谢 将其设为3*a,您省略了实际的乘法。def seq(num) def longest_collatz_sequence(n) longest_sequence = [] (1..n).each do |a| sequence = [a] until sequence.last == 1 if a % 2 ==

最长拼贴顺序(100)

当我运行算法时,我被告知3a+1中有一个意外的标识符,并且程序没有运行。我的问题在哪里


谢谢

将其设为
3*a
,您省略了实际的乘法。

def seq(num)
def longest_collatz_sequence(n)
    longest_sequence = []
    (1..n).each do |a|
        sequence = [a]
        until sequence.last == 1
            if a % 2 == 0
                sequence.push(a/2)
            else
                sequence.push(3a + 1)
            end
        end
        if sequence.length > longest_sequence.length
            longest_sequence = sequence
        end
    end
    longest_sequence
end
tryied=[] 最高计数=0 最高=零 最高顺序=零 元素=零 arr=(1..num).to_a arr=arr.reverse 每一个{| el{124; 如果序列计数(el)>最高计数和尝试包括?(el) 最高计数=顺序计数(el) 最高=el 最高顺序=顺序arr(el) 试压混凝土(如下所示) 终止 } p最高 p最高计数 p最高 终止 def序列计数(num) 温度=数值 计数=1 直到temp==1时为止 如果是偶数? 温度=温度/2 计数+=1 艾尔希夫温度奇吗? 温度=(3*temp)+1 计数+=1 终止 终止 计数 终止 def序列arr(数量) 温度=数值 arr=[]
arr为此,您在SO中提出了一个问题:)如果你尝试IRB,它可以帮助你。谢谢!真不敢相信我错过了。该算法适用于2,但不适用于n>2。你知道为什么吗@pjs@user2469211那是另一个问题。如果你自己解决不了,请发一个新问题
def seq(num)
  tryied = []
  highest_count = 0
  highest = nil 
  highest_seq = nil
  element = nil 
 arr = (1..num).to_a
 arr = arr.reverse 
 arr.each { |el| 

 if seq_count(el) > highest_count && !tryied.include?(el)
    highest_count = seq_count(el)
    highest = el 
   highest_seq = seq_arr(el)
   tryied.concat(seq_arr(el))
  end
 }
p highest
p highest_count
p highest_seq


end









def seq_count(num)
  temp = num  
  count = 1

until temp == 1 do 
  if temp.even?
     temp = temp/2 
     count += 1
  elsif temp.odd?
     temp = (3*temp) + 1 
     count += 1
  end 
end 
  count 
end 

def seq_arr(num)
    temp = num  
  arr = []
  arr << temp

until temp == 1 do 
  if temp.even?
     temp = temp/2 
     arr << temp
  elsif temp.odd?
     temp = (3*temp) + 1 
     arr << temp
  end 
end 
   arr 
end 

 seq(1000000)