fibonacci數列是這樣定義的:
f[0] = 0
f[1] = 1
for each i ≥ 2: f[i] = f[i-1] + f[i-2]
因此,fibonacci數列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在fibonacci數列中的數我們稱為fibonacci數。給你乙個n,你想讓其變為乙個fibonacci數,每一步你可以把當前數字x變為x-1或者x+1,現在給你乙個數n求最少需要多少步可以變為fibonacci數。
輸入為乙個正整數n(1 ≤ n ≤ 1,000,000)
輸出乙個最小的步數變為fibonacci數"輸入:
輸出:
num = int(raw_input())
a = [0,1]
i = 2
while a[i-1] + a[i-2] <= 1000000:
i += 1
# print a
if num in a:
print 0
else:
for i in range(len(a)):
if a[i] > num:
loca = i
break
print min(a[loca] - num,num - a[loca-1])
上面的**對於每個示例都建立了最大的斐波那契數列,然而對於一些輸入較小的示例,顯然沒有必要簡歷全部的數列。考慮最後輸出結果時,只用到數目左右兩邊的斐波那契數,那麼簡歷從0到n的斐波那契數列也是沒有必要的。
num = int(raw_input())
an_1 = 1
an_2 = 0
while 1:
next = an_1 + an_2
if next >= num:
break
an_2 = an_1
an_1 = next
print min(next - num, num - an_1)
斐波那契數
入門訓練 fibonacci數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,...
斐波那契數
斐波那契數列 fibonacci sequence 簡介 斐波那契數列 fibonacci sequence 又稱 分割 數列 因 數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 ...
斐波那契數
遞迴演算法是不可取的。由於效率非常低,並且還有棧溢位的風險。應該使用例如以下的迭代解法 int fibonacci unsigned int n if n 1 int i 0,j 1,m unsigned int k for k 2 k n k return m 可是對於這題來說。上面的 還是不行的...