【题解】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;
}
相关推荐
永远不会的CC1 天前
研0上岸找实习面试经历
python·算法·面试
帅小伙―苏1 天前
力扣483找到字符串中所有字母异位词
算法·leetcode
小O的算法实验室1 天前
2022年IEEE TETCI,基于矩阵的进化计算,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
欧米欧1 天前
STRING的底层实现
前端·c++·算法
smj2302_796826521 天前
解决leetcode第3906题统计网格路径中好整数的数目
python·算法·leetcode
KobeSacre1 天前
leetcode 树
算法·leetcode·职场和发展
6Hzlia1 天前
【Hot 100 刷题计划】 LeetCode 104. 二叉树的最大深度 | C++ 自底向上递归最优解
算法
Robot_Nav1 天前
Kinodynamic Lazy ThetaStar:面向实时机器人导航的两阶段运动学路径规划算法
算法·机器人·lazy theta
热心网友俣先生1 天前
2026华中杯A题超详细解题思路+第一篇论文分享
人工智能·算法·机器学习
全栈开发圈1 天前
新书速览|机器人系统开发与优化:算法、感知与控制策略
算法·目标跟踪·机器人