- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Find the Minimum Number of Fibonacci Numbers Whose Sum Is K in C++
Suppose we have a number k, we have to find the minimum number of Fibonacci numbers whose sum is equal to the k, whether a Fibonacci number could be used multiple times.
So, if the input is like k = 7, then the output will be 2, as the Fibonacci numbers are: 1, 1, 2, 3, 5, 8, 13, ... For k = 7 we can use 2 + 5 = 7.
To solve this, we will follow these steps −
Define an array f
insert 0 at the end of f
insert 1 at the end of f
while last element of f <= k, do −
insert (last element of f + second last element of f) into f
ret := 0
j := last index of f
while (j >= 0 and k > 0), do −
if f[j] <= k, then −
k := k - f[j]
(increase ret by 1)
Otherwise
(decrease j by 1)
return ret
Example
Let us see the following implementation to get a better understanding −
#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)); }
Input
7
Output
2
Advertisements