在C ++中找到总和为K的最小斐波那契数
假设我们有一个数字k,那么无论斐波那契数是否可以多次使用,我们都必须找到总和等于k的最小斐波那契数。
因此,如果输入像k=7,则输出将为2,因为斐波那契数为:1、1、2、3、5、8、13...对于k=7,我们可以使用2+5=7。
为了解决这个问题,我们将遵循以下步骤-
定义一个数组f
在f的末尾插入0
在f的末尾插入1
当f<=k的最后一个元素时-
将(f的最后一个元素+f的倒数第二个元素)插入f
ret:=0
j:=f的最后一个索引
而(j>=0并且k>0),做-
(将j减1)
k:=k-f[j]
(增加ret1)
如果f[j]<=k,则-
除此以外
返回ret
例
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int findMinFibonacciNumbers(int k) {
vector<int> f;
f.push_back(0);
f.push_back(1);
while (f.back() <= k) {
f.push_back(f[f.size() - 1] + f[f.size() - 2]);
}
int ret = 0;
int j = f.size() - 1;
while (j >= 0 && k > 0) {
if (f[j] <= k) {
k -= f[j];
ret++;
}
else
j--;
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.findMinFibonacciNumbers(7));
}输入值
7
输出结果
2