让我们假设你有一个号码。您必须计算其fibonacci-ish
序列。例如,我们都知道斐波那契序列
0 1 1 2 3 5 8 13 21 ......
。
如果要给你21号,你必须打印序列0 1 1 2 3 5 8 13 21
现在考虑另一个数字26.它不在上面的序列中。但是有一个序列。那是0 2 2 4 6 10 16 26
。
考虑另一个。 7.序列为1 3 4 7
。
注意每个数字可以有多个序列。例如,你可以说26个按顺序1 25 26
掉落。
你必须最大化序列。通过最大化我的意思是你必须找到序列中的最大数量。例如,1 25 26
只有3个数字,而0 2 2 4 6 10 16 26
有8个数字。所以8个数字的序列是可取的。
因此,问题陈述是Given a number compute its series of numbers where the sequence has maximum amount of numbers
。
我试过的方法:
检查每个值的编号。例如,对于26,序列可以是
26 25 1
26 24 2
26 23 3
26 22 4
26 21 5
26 20 6
26 19 7
等等。
有更好的方法吗?
答案 0 :(得分:2)
如果从1,1以外的一对开始,那么连续项之间的比率仍约为(1 + sqrt(5))/ 2。要找到以n结尾的最长序列,请选择下一个最大数字为n *(sqrt(5) - 1)/ 2的最低或最高数字,然后向后运行斐波那契序列。
例如从21开始,我们有21 *(sqrt(5)-1)/ 2 = 12.98,所以 使用13我们倒退得到8 = 21 - 13,5 = 13 - 8,3,2,1,1
26,我们得到下一个数字为16,给出相反的顺序 26,16,10,6,4,2,2,0