C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で合計がKであるフィボナッチ数の最小数を見つける


数kがあるとすると、フィボナッチ数を複数回使用できるかどうかにかかわらず、合計がkに等しいフィボナッチ数の最小数を見つける必要があります。

したがって、入力がk =7の場合、フィボナッチ数は1、1、2、3、5、8、13、...であるため、出力は2になります。k=7の場合、2+を使用できます。 5=7。

これを解決するには、次の手順に従います-

  • 配列fを定義する

  • fの最後に0を挿入します

  • fの最後に1を挿入します

  • f <=kの最後の要素である間、-

    • (fの最後の要素+ fの最後から2番目の要素)をfに挿入します

  • ret:=0

  • j:=fの最後のインデックス

  • (j> =0およびk>0)の場合、-

    • f [j] <=kの場合、-

      • k:=k --f [j]

      • (retを1増やします)

    • それ以外の場合

      • (jを1つ減らします)

  • 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

  1. Xとの合計がC++のフィボナッチ数であるノードをカウントします

    ノードの重みを数値として持つ二分木を指定します。目標は、その数がフィボナッチ数であるような重みを持つノードの数を見つけることです。フィボナッチ数列の数は次のとおりです。0、1、1、2、3、5、8、13…。n番目の数はの合計です。 (n-1)番目と(n-2)番目。重みが13の場合、それはフィボナッチ数であるため、ノードがカウントされます。 例 入力 temp=1。値を入力した後に作成されるツリーを以下に示します- 出力 Count the nodes whose sum with X is a Fibonacci number are: 3 説明 we are given with

  2. C++でのフィボナッチ数の2乗の合計

    フィボナッチ数列は、0から始まる数学的シーケンスであり、2つの数の合計は次の次の数に等しくなります。たとえば、最初の数は0で、2番目の数は1です。0と1の合計は1になります。 F0=0, F1=1 そして Fn=Fn-1+Fn-2, F2=F0+F1 F2=0+1 F2=1 次に、番号1と1を追加すると、次の番号は2になります F1=1, F2=1 そして Fn=Fn-1+Fn-2, F3=F1+F2 F3=1+1 F3=2 フィボナッチ数列は0、1、1、2、3、5、8、13、21、34、… 燃料エネルギー系列の2乗を見つけてから、それを合計して結果を見つける必要があります Inpu