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

合計がC++の完全な正方形である配列内のペアの数


N個の要素の配列が与えられます。目標は、i!=jのような完全な二乗である合計を持つすべてのペア(Arr [i]、Arr [j])の数を見つけることです。つまり、Arr [i] +Arr[j]は完全な正方形です。

これを行うには、ペアの合計を計算し、その合計の平方根が平方根のフロア値と等しいかどうかを確認します。 sqrt(Arr [i] + Arr [j])-floor(sqrt(Arr [i] + Arr [j])==0。

例を挙げて理解しましょう。

入力 − arr [] ={4,3,2,1,2,4} N =6

出力 −合計が完全な平方であるペアの数− 2

説明

Arr[1]+Arr[3]=4, sqrt(4)-floor(4)=0 4 is a perfect square.
Arr[2]+Arr[4]=4, sqrt(4)-floor(4)=0 4 is a perfect square.
Rest all pairs have sum 7,6,5,8 which are not perfect squares.

入力 − arr [] ={3,3,3,3,3} N =5

出力 −合計が完全な二乗であるペアの数− 0

説明 −すべてのペアのsum =6ですが、これは完全な正方形ではありません。

以下のプログラムで使用されているアプローチは次のとおりです

  • 手袋のサイズが0より大きい場合、乱数で初期化された整数配列Arr[]を使用します。

  • Arr[]の長さを格納する変数nを取ります。

  • 関数countPairs(int arr []、int n)は、入力としてその長さの配列を受け取り、完全な平方である合計を持つペアを返します。

  • ペアの要素ごとに2つのforループを使用して配列をトラバースします。

  • 0 <=i

  • arr [i]の合計を計算し、arr[j]は正です。

  • 合計の平方根をsqrt(sum)として計算します。

  • 次に、sqr-floor(sqr)==0かどうかを確認します。つまり、合計は完全な正方形です。真のインクリメントカウントの場合。

  • すべてのループの終わりに、カウントには、完全な二乗である合計を持つペアの総数が含まれます。

  • 結果としてカウントを返します。

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int countPairs(int arr[], int n){
   int count=0;
   int sum=0;
   double sqr=0;
   for(int i=0;i<n-1;i++){
      for(int j=i+1;j<n;j++){
         sum=arr[i]+arr[j];
         sqr=sqrt(sum);
         if( sqr-floor(sqr)==0 ){
            count++;
            //cout<<endl<<"a :"<<arr[i]<<" b :"<<arr[j]; //to print
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 1, 2, 4, 8, 5, 6 };
   // Size of arr[]
   int n = sizeof(arr) / sizeof(int);
   cout <<endl<<"Pairs whose sum is perfect square :"<<countPairs(arr, n);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Pairs whose sum is perfect square :2

  1. C++で重みが完全な正方形であるノードを数えます

    ノードの重みを持つ二分木が与えられます。目標は、数が完全な平方になるような重みを持つノードの数を見つけることです。重みが36の場合は62であるため、このノードがカウントされます。 例 入力 値を入力した後に作成されるツリーを以下に示します- 出力 Count the nodes whose weight is a perfect square are: 4 説明 ツリーノードと各ノードに関連付けられた重みが与えられます。次に、ノードの桁が完全な平方であるかどうかを確認します。 ノード 重量 パーフェクトスクエア はい/いいえ 2 121 11 * 11 はい

  2. 合計がC++の指定された値xに等しい2つのBSTからペアをカウントします

    入力として2つの二分探索木と変数xが与えられます。目標は、ノードの値の合計がxに等しくなるように、各ツリーからノードのペアを見つけることです。 BST_1からノード1を取得し、BST_2からノード2を取得して、両方のデータ部分を追加します。 sum=xの場合。インクリメントカウント。 例を挙げて理解しましょう。 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 1 説明 −ペアは(8,6) 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 2 説明 −ペアは(5,15)と(4,16) 以下のプログラムで使用されているアプ