重みが正確にXであり、C++で重みMの少なくとも1つのエッジを持つパスの数をカウントします。
無限のレベルを持つことができるツリー、ノードが持つことができる子の数を格納する可変の子、パスに関連付けられた重みを格納する可変の重み、およびパスとタスクを格納する可変のパスが与えられます。 Xに等しい重みを持つパスの数を計算し、指定された重みを持つエッジが少なくとも1つ存在する必要があります。
例
入力- int child =4、weight =4、path =4;
出力- 重みが正確にXであり、重みMの少なくとも1つのエッジを持つパスの数は次のとおりです。1
説明- 4つの子が4つのパスに接続されており、パスに4の重みが関連付けられているノードが与えられているためです。したがって、重みが4、つまり1〜4のパスは1つしか存在できないため、カウントは1であることがわかります。
入力- int child =3、weight =2、path =4;
出力- 重みが正確にXであり、重みMの少なくとも1つのエッジを持つパスの数は次のとおりです。4
説明- 3つの子が4つのパスに接続されており、パスに2の重みが関連付けられているノードが与えられているためです。したがって、重みが2の4つのパス、つまり1-1、1-2、2-1、および2-1が存在する可能性があることがわかります。したがって、カウントは4です。
以下のプログラムで使用されているアプローチは次のとおりです
- 変数の子、重み、およびパスの各パスに関連付けられている子、パス、および重みの総数をそれぞれ入力します。
- 指定されたサイズの配列を宣言します。
- 配列のサイズになるまで、iから0までのループFORを開始します。ループ内で、jから0までの別のループFORを開始し、jが2未満になるまで、arr[i][j]を-1に設定します。
- ここで、path、0、weight、child、およびarrを関数の引数として渡して、関数total_weight()を呼び出します。
- 関数内
- 結果を格納するための一時変数カウントを宣言します。
- 0未満のIFパスを確認してから、0を返します
- IFパスが0に等しいことを確認してから、iを返します
- arr [path] [i]が1に等しくないかどうかを確認してから、arr [path] [i] を返します。
- jから子までのループFORを開始します。ループ内で、path-j、1、weight、child、およびarrを引数として関数に渡すことにより、関数total_weight()関数への再帰呼び出しとしてifjがsetcountよりも重みに等しいことを確認します。
- それ以外の場合は、path-j、i、weight、child、およびarrを引数として関数に渡すことにより、関数total_weight()関数への再帰呼び出しとしてcountを設定します。
- arr[path][i]をカウントとして設定します
- return arr [path] [i]
- 結果を印刷します。
例
#include <bits/stdc++.h> using namespace std; #define size 4 #define col 4 int total_weight(int path, int i, int weight, int child, int arr[size + 1][col]) { int count = 0; if (path < 0) { return 0; } if (path == 0) { return i; } if (arr[path][i] != -1) { return arr[path][i]; } for (int j = 1; j <= child; j++) { if (j == weight) { count += total_weight(path - j, 1, weight, child, arr); } else { count += total_weight(path - j, i, weight, child, arr); } } arr[path][i] = count; return arr[path][i]; } int main() { int child = 4, weight = 4, path = 4; int arr[size + 1][col]; for (int i = 0; i <= size; i++) { for (int j = 0; j < 2; j++) { arr[i][j] = -1; } } cout << "Count of number of paths whose weight is exactly X and has at-least one edge of weight M are: " << total_weight(path, 0, weight, child, arr); }
上記のコードを実行すると、次の出力が生成されます-
出力
Count of number of paths whose weight is exactly X and has at-least one edge of weight M are: 1
-
C++で重みが完全な正方形であるノードを数えます
ノードの重みを持つ二分木が与えられます。目標は、数が完全な平方になるような重みを持つノードの数を見つけることです。重みが36の場合は62であるため、このノードがカウントされます。 例 入力 値を入力した後に作成されるツリーを以下に示します- 出力 Count the nodes whose weight is a perfect square are: 4 説明 ツリーノードと各ノードに関連付けられた重みが与えられます。次に、ノードの桁が完全な平方であるかどうかを確認します。 ノード 重量 パーフェクトスクエア はい/いいえ 2 121 11 * 11 はい
-
C++で重みが2の累乗である特定のツリー内のノードをカウントします
ノードの重みを持つ二分木が与えられます。目標は、数が2の累乗になるような重みを持つノードの数を見つけることです。重みが32の場合は25なので、このノードがカウントされます。 例 入力 値を入力した後に作成されるツリーを以下に示します- 出力 Count the nodes in the given tree whose weight is a power of two are: 3 説明 we are given with the tree node and the weights associated with each node. Now we calculate the po