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

C ++の二分探索を使用して、指定された精度までの数の平方根を検索します


正の数nと精度pがあるとします。二分探索法を使用して、小数点以下p桁までの数nの平方根を見つける必要があります。したがって、数値がn =50、p =3の場合、出力は7.071になります。

だからこれを解決するには、いくつかの手順に従う必要があります-

  • start:=0およびend:=nを初期化します
  • 中間の整数の2乗を比較します。これが数値と等しい場合は、整数部分が検出されます。それ以外の場合は、必要に応じて左または右を探します。
  • 積分部分のタスクが完了したら、小数部分のタスクを実行します。
  • インクリメント変数を0.1として初期化し、p桁までの小数部を計算します。反復ごとに、増分は前の値の1/10に変更されます。
  • 最後に答えを返します。

#include<iostream>
using namespace std;
float sqrtBinarySearch(int num, int p) {
   int left = 0, right = num;
   int mid;
   float res;
   while (left <= right) {
      mid = (left + right) / 2;
      if (mid * mid == num) {
         res = mid;
         break;
      }
      if (mid * mid < num) {
         left = mid + 1;
         res = mid;
      } else {
         right = mid - 1;
      }
   }
   float incr = 0.1;
   for (int i = 0; i < p; i++) {
      while (res * res <= num) {
         res += incr;
      }
      res -= incr;
      incr /= 10;
   }
   return res;
}
int main() {
   int n = 50, p = 3;
   cout << "Square root of " << n << " up to precision " << p << " is: " << sqrtBinarySearch(50, 3) << endl;
}

出力

Square root of 50 up to precision 3 is: 7.071

  1. C++で特定の二分木の左葉ノードの合計を求めます

    ルートノードとその左の子と右の子を持つ二分木があるとしましょう。タスクは、親ノードに残されているツリーのリーフノードの合計を見つけることです。 例 入力-1: 出力: 15 説明: 与えられた入力二分木では、すべての左側の葉ノードの合計は9 + 4 + 2 =15です。したがって、出力は15です。 この問題を解決するためのアプローチ 二分木があり、その親に残されているすべてのリーフノードの合計を見つけることがタスクです。 この問題を解決するための再帰的なアプローチは、ルートノードの左側のノードが空かどうかを確認することです。空の場合は、左側のノードの合計を計算し、右

  2. C++のバイナリツリーでルートから特定のノードまでの距離を検索します

    ノードが少ない二分木があると考えてください。ルートと別のノードuの間の距離を見つける必要があります。ツリーが次のようになっているとします。 これで、(root、6)=2の間の距離、パスの長さは2、(root、8)=3の間の距離などになります。 この問題を解決するために、再帰的アプローチを使用して、左右のサブツリーでノードを検索し、各レベルの長さも更新します。 例 #include<iostream> using namespace std; class Node {    public:       int data; &