
一、题目描述

二、算法原理
思路:列出所有的 Fibonacci 数值,依次和输入的值比较
1)使用一个一维数组来存储 Fibonacci 数值,注意:这个数组只能存储 Fibonacci 数值
2)使用 while 循环来计算并存储 Fibonacci 数值,当这个数组的最后一个数字大于 n 时,那么退出循环
3)此时的情况是:数组的最后一个数字大于 n ,倒数最后一个数字小于 n ,那么我们计算的最小的 n 变成 Fibonacci 数字的步数,就是计算这两个数子的差值;
三、代码实现
cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n = 0;
std::cin >> n;
std::vector<int> ret = {0,1};//存储 Fibonacci 数列
while(ret.back() < n)//结束循环的 Fibonacci 数 大于 n
{
ret.push_back(ret[ret.size() - 1] + ret[ret.size() - 2]);
}
if(n == ret.back()) std::cout << 0 << std::endl;
else
{
int mini = min(ret.back() - n, n - ret[ ret.size() - 2 ]);//小的 Fiboncci 数 n 大的 Fiboncci 数(ret.back())
std::cout << mini << std::endl;
}
return 0;
}