C ++で(x%k)*(x / k)==nとなるような最小のxを見つけます
2つの正の整数nとkが与えられ、(x%k)*(x / k)がnと同じになるように、正の整数xを見つける必要があります。したがって、nとkがそれぞれ4と6の場合、出力は10になります。したがって、(10%6)*(10/6)=4です。
x%kの値は[1からk – 1]の範囲にあることがわかっているので(0は含まれません)ここで、nを除算する範囲で可能な整数を見つけるため、与えられた方程式は次のようになります。 * k)/(x%k)+(x%k)
例
#include<iostream> using namespace std; int minValue(int x, int y){ return (x > y)?y:x; } int getX(int n, int k) { int x = INT_MAX; for (int rem = k - 1; rem > 0; rem--) { if (n % rem == 0) x = minValue(x, rem + (n / rem) * k); } return x; } int main() { int n = 4, k = 6; cout << "The minimum value of x: " << getX(n, k); }
出力
The minimum value of x: 10
-
C++で二分木の最小の深さを見つける
この問題では、二分木が与えられます。私たちの仕事は、二分木のMinimumDepthを見つけることです。 二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。 二分木の最小の深さは、ルートノードから任意のリーフノードまでの最短経路です。 問題を理解するために例を見てみましょう 入力 出力 2 ソリューションアプローチ この問題の解決策は、二分木をトラバースして高さを数えることです。これは、リーフ以外のノードごとにノードの子ノードを再帰的に呼び出し、リーフノードごとに1を返すことで実行できます。 ソリューションの動作を説明するプログラム 例 #in
-
C++で最小の合計を持つツリーレベルを見つけるプログラム
二分木があり、そのルートのレベルが1、子のレベルが2などであると仮定します。レベルXのノードのすべての値の合計が最小になるように、最小のレベルXを見つける必要があります。したがって、ツリーが次のような場合- 合計が4– 10 =-6であるため、出力は2になります。これは最小です。 これを解決するには、次の手順に従います- level:=1、sum:=rの値、ansLevel:=level、ansSum:=sum キューqを定義し、指定されたノードrをqに挿入します qが空ではない間 容量:=qのサイズ レベルを1増やし、合計:=0 容量が0では