C++を使用して指定された高さのAVLツリー内のノードの最小数。
問題の説明
AVLツリーの高さを考えると、タスクはツリーが持つことができるノードの最小数を見つけることです。
If height = 0 then AVL tree can have one 1 node If height = 5 then AVL tree can have minimum 20 nodes
アルゴリズム
AVLツリーでは、高さのバランスプロパティを維持する必要があります。つまり、左右のサブツリーの高さの差は、ノードごとに-1、0、または1を超えることはできません。このプロパティを使用して、以下の漸化式を作成できます-
1. If height = 0 then return 1 2. If height = 1 then return 2 3. If height > 1 then return (1 + getMinAVLNodes(h – 1) + getMinAVLNodes(h – 2))
例
#include <iostream> using namespace std; int getMinAVLNodes(int h){ if (h < 0) { return 0; } if (h == 0 || h == 1) { return h + 1; } return 1 + getMinAVLNodes(h - 1) + getMinAVLNodes(h -2); } int main(){ int h = 5; cout << "Minimum nodes for " << h << " height = " << getMinAVLNodes(h) << endl; return 0; }
出力
上記のプログラムをコンパイルして実行する場合。次の出力を生成します-
Minimum nodes for 5 height = 20
-
C++を使用してNを25で割り切れるのに必要な所定の移動の最小数。
問題の説明 先行ゼロのない数値Nが与えられます。タスクは、Nを25で割り切れるのに必要な最小移動数を見つけることです。各移動で、隣接する2桁を入れ替えて、いつでも数値に先行ゼロが含まれていないことを確認できます。 Nを25で割り切れない場合は、-1を出力します N =5071の場合、25で割り切れるには4回の移動が必要です 5071 → 5701 → 7501 → 7510 → 7150 アルゴリズム 1. Iterate over all pairs of digits in the number. Let the first digit in t
-
C ++を使用して、数の因数の最小合計を求めます。
ここでは、与えられた数の因子の最小合計を取得する方法を見ていきます。数が12であると仮定します。これはさまざまな方法で因数分解できます- 12 =12 * 1(12 + 1 =13) 12 =2 * 6(2 + 6 =8) 12 =3 * 4(3 + 4 =7) 12 =2 * 2 * 3(2 + 2 + 3 =7) 最小の合計は7です。数値を取り、最小の因子の合計を見つけようとします。最小の因数分解の合計を取得するには、可能な限り数を因数分解する必要があります。言い換えれば、素因数を足して合計Sを求めようとすると、その合計は最小化されると言えます。 例 #include<