# Minimum number of elements to be replaced to make the given array a Fibonacci Sequence

Given an array arr containing N integer elements, the task is to count the minimum number of elements that need to be changed such that all the elements (after proper rearrangement) make first N terms of Fibonacci Series.

Examples:

Input: arr[] = {4, 1, 2, 1, 3, 7}
Output: 2
4 and 7 must be changed to 5 and 8 to make first N(6) terms of Fibonacci series.

Input: arr[] = {5, 3, 1, 1, 2, 8, 11}
Output: 1
11 must be changed to 13.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• Insert first N elements of Fibonacci series into a multi set.
• Then, traverse the array from left to right and check if the current element is present in multi set.
• If element is present in the multi set then remove it.
• Final answer will be the size of final multi set.

Below is the implementation of the above approach:

 `// C++ program to find the minimum number ` `// of elements the need to be changed ` `// to get first N numbers of Fibonacci series ` `#include ` `using` `namespace` `std; ` ` `  `// Function that finds minimum changes required ` `int` `fibonacciArray(``int` `arr[], ``int` `n) ` `{ ` `    ``multiset<``int``> s; ` ` `  `    ``// a and b are first two ` `    ``// fibonacci numbers ` `    ``int` `a = 1, b = 1; ` `    ``int` `c; ` ` `  `    ``// insert first n fibonacci elements to set ` `    ``s.insert(a); ` `    ``if` `(n >= 2) ` `        ``s.insert(b); ` ` `  `    ``for` `(``int` `i = 0; i < n - 2; i++) { ` `        ``c = a + b; ` `        ``s.insert(c); ` `        ``a = b; ` `        ``b = c; ` `    ``} ` ` `  `    ``multiset<``int``>::iterator it; ` `    ``for` `(``int` `i = 0; i < n; i++) { ` ` `  `        ``// if fibonacci element is present ` `        ``// in the array then remove it from set ` `        ``it = s.find(arr[i]); ` `        ``if` `(it != s.end()) ` `            ``s.erase(it); ` `    ``} ` ` `  `    ``// return the remaining number of ` `    ``// elements in the set ` `    ``return` `s.size(); ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 3, 1, 21, 4, 2, 1, 8, 9 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]); ` ` `  `    ``cout << fibonacciArray(arr, n); ` ` `  `    ``return` `0; ` `} `

Output:

```2
```

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.