C++で合計がKに等しい最小フィボナッチ項
この問題では、数値Kが与えられます。私たちのタスクは、合計がKに等しい最小フィボナッチ項を見つけることです。 。
フィボナッチ数列は、前の2つの数値を加算することにより、後続の数値を生成します。フィボナッチ数列は、F0とF1の2つの数字から始まります。 F0とF1の初期値は、それぞれ0、1、または1、1にすることができます。
フィボナッチ数列は011 2 3 5 8 13
問題を理解するために例を見てみましょう
入力
K = 5
出力
2
説明
The sum 5 can be made using 3 and 2.
ソリューションアプローチ
フィボナッチ数を使用すると、1がフィボナッチ数であるため、任意の数として合計を取得できます。 1 n回加算すると、合計はnになります。私たちの仕事は、合計を与えるフィボナッチ数の数を最小限に抑えることです。コインがフィボナッチ数の値を持っているコイン交換問題からベースをとることによって、解決策を達成することができます。プログラミング言語では、この問題を解決する手法は欲張りアプローチと呼ばれます。
最初に、合計n以下になるまでフィボナッチ数を合計します。次に、最後の項から始めて、その項をnからn>k番目の項まで減算します。そして、並べて、用語の数のカウントを増やします。 n
フィボナッチ項を計算する関数を作成します。
n以下のすべてのフィボナッチ項を計算します。
次の項がnより大きい場合は、それをベクトルにプッシュして返さないでください。
合計がnに等しいフィボナッチ項の最小数を見つける関数を作成します。
ベクトルを初期化して、フィボナッチ項を格納します。
合計nから合計>0までフィボナッチ項を減算します。
合計nをj番目のフィボナッチ項で割って、合計に寄与する項の数を求めます。
得られたカウントを出力として出力します。
ソリューションの動作を説明するプログラムアルゴリズム
例
#include <bits/stdc++.h>
using namespace std;
void findFiboTerms(vector<int>& fiboVals, int K){
int i = 3, nextTerm;
fiboVals.push_back(0);
fiboVals.push_back(1);
fiboVals.push_back(1);
while (1) {
nextTerm = fiboVals[i - 1] + fiboVals[i - 2];
if (nextTerm > K)
return;
fiboVals.push_back(nextTerm);
i++;
}
}
int findTermForSum(int K){
vector<int> fiboVals;
findFiboTerms(fiboVals, K);
int termCount = 0, j = fiboVals.size() - 1;
while (K > 0) {
termCount += (K / fiboVals[j]);
K %= (fiboVals[j]);
j--;
}
return termCount;
}
int main(){
int K = 11;
cout<<"Minimum Fibonacci terms with sum equal to K is "<<findTermForSum(K);
return 0;
}
出力
Minimum Fibonacci terms with sum equal to K is 2
-
C++での等しい合計とXOR
この問題では、整数nが与えられます。私たちのタスクは、i =0からnまでの整数の数を見つけるプログラムを作成することです。ここで、合計はXORに等しくなります。つまり、(n + i)=(n ^ i)。 問題を理解するために例を見てみましょう 入力: n =4 出力: 4 説明: 0からnまでのiのすべての値を考慮して i =0、4 + 0 =4、4 ^ 0 =4 i =1、4 + 1 =5、4 ^ 1 =5 i =2、4 + 2 =6、4 ^ 2 =6 i =3、4 + 3 =7、4 ^ 3 =7 i =4、4 + 4 =8、4 ^ 4 =0 カウント=4 ソリュー
-
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