Ruby 查找起始编号的最长collatz序列<;100
最长拼贴顺序(100) 当我运行算法时,我被告知3a+1中有一个意外的标识符,并且程序没有运行。我的问题在哪里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 ==
谢谢 将其设为
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)