【题解】NowCoder Fibonacci数列

题目来源:牛客

题目链接: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

输入:12

输出:2

解析

斐波那契数列真是非常经典的题目啊,虽然题目问的不是斐波那契第几个数字的值,但是也是非常简单的。我们只需要找到距离输入的数字最小的斐波那契数字即可。由于斐波那契数字只跟前两个斐波那契额数字相关,所以我们可以 通过3个变量进行滚动来迭代斐波那契数列

每次通过 "前锋" c 来判断是否找到输入的数字,最终使其落入 b ~ c 之间。

代码实现

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
    int N;
    cin >> N;

    int a = 0;
    int b = 1;
    int c = 1;
	
	// 找出输入的数字,使其在 b~c 之间
    while (N > c)
    {
        a = b;
        b = c;
        c = a + b;
    }
	
	// 输出距离最小的
    cout << min(N - b, c - N);
    return 0;
}
相关推荐
passxgx1 分钟前
12.3 多维高斯分布与加权最小二乘法
线性代数·算法·最小二乘法
少许极端1 分钟前
算法奇妙屋(三十)-递归、回溯与剪枝的综合问题 3
算法·深度优先·剪枝·数独·n皇后
WBluuue10 分钟前
数据结构与算法:01分数规划
c++·算法
七七肆十九19 分钟前
PTA 习题9-1 时间换算
c语言·算法
XW010599923 分钟前
5-6统计工龄
数据结构·python·算法
EQUINOX130 分钟前
倍增优化dp,P10976 统计重复个数
算法·数学建模·动态规划
样例过了就是过了33 分钟前
LeetCode热题100 电话号码的字母组合
数据结构·c++·算法·leetcode·dfs
nervermore99035 分钟前
1.10 面试经典150题-多数元素
算法
c++逐梦人35 分钟前
二分查找模版及二分答案例题
算法·蓝桥杯
biubiuibiu43 分钟前
选择适合的硬盘:固态与机械硬盘的对比与推荐
c++·算法