C++程序查找第N个非斐波那契数


在这个问题中,我们给定一个整数N。我们的任务是使用C++程序查找第N个非斐波那契数

斐波那契数列 通过将前两个数字相加生成后续数字。斐波那契数列从两个数字开始 - F0 & F1。F0 & F1 的初始值可以分别取 0, 1 或 1, 1。

让我们举一个例子来理解这个问题,

输入

N = 5

输出

10

解决方案方法

解决该问题的一个简单方法是找到斐波那契数,然后打印不在斐波那契数中的前n个数字。

另一种解决方案是使用斐波那契数公式,然后连续添加两个斐波那契数之间的间隔。最后,所有间隔的总和将得出所需的输出。在这里,我们将使用明智的想法来破解。

算法

  • 创建三个变量,它们将跟踪当前元素、前一个元素和前一个元素。

  • 当非斐波那契数的计数为非负时,使用斐波那契数的简单公式 - Fib(n)=Fib(n-1)+Fib(n-2)。

  • 使用公式n=n+(curr-prev-1)获取非斐波那契数的计数。


  • 现在,要获得第n个非斐波那契数,请从n中减去前一个数字。

示例

程序说明我们解决方案的工作原理

#include<iostream>
using namespace std;
int findNthNonFiboNumber(int n){
   int lastLastVal = 1, lastVal = 2, currVal = 3;
   while (n > 0){
      lastLastVal = lastVal;
      lastVal = currVal;
      currVal = lastLastVal + lastVal;
      n = n - (currVal - lastVal - 1);
   }
   n = n + (currVal - lastVal - 1);
   return (lastVal + n);
}
int main(){
   int n = 7;
   cout<<"Nth non fibonacci number is "<<findNthNonFiboNumber(n);
   return 0;
}

输出

Nth non fibonacci number is 12

更新于: 2022年2月14日

731 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告