Fibonacci数列 C++ 题目来源:牛客网

  1. [编程题]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

  2. 思路:先把Fibonacci数列放入一个数组中,之后进行遍历,和数组中的第i个数相比大于同时和第i+1个数相比小于,则找到了需要多少步可以变为Fibonacci数的位置,看其和那两个数的相减的值谁小谁就是最少的步数。

#include<iostream>
using namespace std;
//方法:比大小 找到适合位置 
int main()
{
    
    
    int N=0;
    cin>>N;
    int F[100]={
    
    0,1};
    int i=0;
    for(int i=2;i<100;i++)
    {
    
    
        F[i]=F[i-1]+F[i-2];
    }
    int result=0;
  for(int i=0;i<100;i++)
  {
    
    
      if(F[i]<=N&&F[i+1]>=N)
      {
    
    
          result=N-F[i]>F[i+1]-N?F[i+1]-N:N-F[i];
          cout<<result<<endl;
          break;
}
     
}
            
return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43807876/article/details/110394475