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
-
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
-
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