C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C++で二分木の最小の深さを見つける

    この問題では、二分木が与えられます。私たちの仕事は、二分木のMinimumDepthを見つけることです。 二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。 二分木の最小の深さは、ルートノードから任意のリーフノードまでの最短経路です。 問題を理解するために例を見てみましょう 入力 出力 2 ソリューションアプローチ この問題の解決策は、二分木をトラバースして高さを数えることです。これは、リーフ以外のノードごとにノードの子ノードを再帰的に呼び出し、リーフノードごとに1を返すことで実行できます。 ソリューションの動作を説明するプログラム 例 #in

  2. 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では