1. 程式人生 > >[筆試題]Fibonacci數與給定目標數之間的最小步數

[筆試題]Fibonacci數與給定目標數之間的最小步數

來源:牛客網點選進入

題目描述
  • 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數”
    示例1
    輸入
    15
    輸出
    2

解決思路

這道題就是需要我們設計一個迴圈,每次生成一個fibonanci數後,把這個數和目標值比較,分別計算出向左差值和向右差值,並記錄這個值,直到生成的fibonacci數大於目標值,然後跳出迴圈,比較左差值和右差值,輸出較小的值即可。

為了程式碼效率,儘量不要使用遞迴寫法,當用戶輸入一個大數,可能因為遞迴深度太深,造成棧溢位。

程式碼
size_t GetResault(int num)
{

    int fib0 = 0;
    int fib1 = 1;
    int left = 0;
    int right = 0;
    int f = 0;

    while
(1) { f = fib0 + fib1; fib0 = fib1; fib1 = f; if (f < num) left = num - f; else { right = f - num; break; } } return left>right ? right : left; }

完整原始碼:點選檢視

相關推薦

[試題]Fibonacci給定目標之間步數

來源:牛客網點選進入 題目描述 Fibonacci數列是這樣定義的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2] 因此,Fibonacci數列就形如:0, 1, 1, 2,

C語言編程之--scanf()函getchar()函搭配來理解C程序的輸入緩存(buffer)

使用 ges border urn alt color 數值 amp tps 博主最近在學習C語言編程,在書中的代碼示例中出現了下面的代碼段: #include<stdio.h> int main() { char a[5]; int i; printf("

MT【37】二次函整系有關的題

width .com -1 border 經驗 ref idt ont es2017 解析:評:兩根式是不錯的考慮方向,一方面二次函數兩根式之前有相應的經驗,另一方面這裏$\sqrt{\frac{b^2}{4}-c}$正好和兩個根有關系.MT【37】二次函數與整系數有關的題

python之路——內置函匿名函

align items 空字符串 rac strip 默認值 name [0 所在 內置函數 python裏的內置函數。截止到python版本3.6.2,現在python一共為我們提供了68個內置函數。它們就是python提供給你直接可以拿來使用的所有函數。這些函

ref 參out參

col 完成 span .com font blog style img logs 變量作為參數傳給方法,同時希望在方法執行完成後對參數,反應到變量上面。就需要用到ref和out這兩個參數。 ref參數:在 傳入前必須先初始化 out參數:不需要做預先的處理 r

ASP.NET MVC編程入門--MVC5 傳遞參初始化

port ctp params cti 模型 top help mvc ring 傳遞參數格式: $(".limit").live("click", function () { top.location = "/Product

GetModuleFileNameA函GetCurrentDirectoryA函

debug log tools string last tor cts 代碼 ast cited from: http://cooker.iteye.com/blog/657706 頭文件#include <windows.h> C++代碼

js對象工廠函構造函

關鍵字 div 函數 js對象 window 調用 return語句 png 首字母 轉自:http://www.cnblogs.com/Jener/p/5920963.html ★概述: 使用對象字面量,或者向空對象中動態地添加新成員,是最簡單易用的對象創

程序——全局函全局

cnblogs clas color golb 頁面 [] 直接 文件 tor 有時候一個函數需要反復使用的時候還是設置全局的比較好用,全局數據也是如此 一、全局函數   1、先在app.js中定義全局函數      2、在其它頁面引用的時候,先在要引用的js文件的最上

C#基礎之參(二) 組參、可選參命名參

編譯器 line 示例 報錯 一個 傳遞 for 介紹 public   這次介紹的三個參數皆屬於語法糖。   4.數組參數    聲明方法時,在形參前加params關鍵字。簡化了參數調用,增加了可讀性。   用法:   (1)在參數為數組時使用   (2)每個方法只能有一

【Python】無須numpy,利用map函zip(*)函對數組轉置(轉)

http details 介紹 二維數組 nbsp 圖片 因此 art comm http://blog.csdn.net/yongh701/article/details/50283689 在Python的numpy中,對類似array=[[1,2,3],[4,5,6],

php get_called_class()函get_class函的區別

lin body family pan bsp gpo php onos str get_class (): 獲取當前調用方法的類名; get_called_class():獲取靜態綁定後的類名; 有例為證: class Foo{ public fu

普通函構造函的區別

b- reat proto 區別 blog span throw prototype return 1.普通函數 function inherit(p){ if(p == null) throw TypeError(); if(Object.creat

jmeter之_MD5函請求參

問題 html strong In 名稱 PE 線程 bubuko 請求   問題一:使用jmeter對下單進行壓測的時候,訂單號不允許重復,那怎麽辦呢。 可以采用讀取csv文件進行參數化。   步驟:   1.選中線程組,右鍵的配置元件就可以看到【CSV 數

mysql 開發基礎系列7 流程函其它函

when and div IV 數據庫 The CA mar TP 一.流程函數 -- 創建表來介紹 CREATE TABLE salary (userid INT,salary DECIMAL(9,2)); INSERT INTO salary VALUES(1,10

windows內核情景分析之—— KeRaiseIrql函KeLowerIrql()函

fine tca down 調用 def exec pri logs ron windows內核情景分析之—— KeRaiseIrql函數與KeLowerIrql()函數 1.KeRaiseIrql函數 這個 KeRaiseIrql() 只是簡單地調用 hal 模塊的

Python3基礎 str format 位置參關鍵字參

int rac 源碼 cond abc error dev 推薦 type ? python : 3.7.0 OS : Ubuntu 18.04.1 LTS

箭頭函普通函的區別

com call() blur logs xixi tool cee error: 解決 箭頭函數: let fun = () => { console.log(‘lalalala‘); } 普通函數: function fun() { cons

偏導全導的關係 以及 偏微分全微分的關係

1.偏導數 代數意義  偏導數是對一個變數求導,另一個變數當做數 對x求偏導的話y就看作一個數,描述的是x方向上的變化率 對y求偏導的話x就看作一個數,描述的是y方向上的變化率 幾何意義 對x求偏導是曲面z=f(x,y)在x方向上的切線 對y求偏導是曲面z=f(x,y)在x方向

簡單複習一下斯特林貝爾

第一類斯特林數 S 1 (