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

製品がC++の配列に存在するペアをカウントします


整数型要素の配列が与えられ、タスクは、指定された配列からペアを形成し、ペアの要素の積を計算し、指定された積が指定された配列に存在するかどうかを確認することです。

入力 − int arr [] ={6、2、3、1、5、10}

出力 −同じ配列に積が存在するペアの数は− 7

説明 −指定されたアレイから形成できるペアは次のとおりです:(6、2)、(6、3)、(6、1)、(6、5)、(6、10)、(2、3)、( 2、1)、(2、5)、(2、10)、(3、1)、(3、5)、(3、10)、(1、5)、(1、10)、(5、 10)。したがって、同じ配列内の指定された積の値を持つペアは、(2、3)が6、(6、1)が6、(3、1)が3、(2、5)が10、(1、5)です。 5として、(2、1)として2、(1、10)として10。

入力 − int arr [] ={2、4、8、5、10}

出力 −同じ配列に積が存在するペアの数は− 2

説明 −指定されたアレイから形成できるペアは次のとおりです:(2、4)、(2、8)、(2、5)、(2、10)、(4、8)、(4、5)、( 4、10)、(8、5)、(8、10)、(5、10)。したがって、同じ配列内の指定された積の値を持つペアは、(2、4)が8、(5、2)が10です。

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

与えられた問題を解決するための複数のアプローチ、すなわちナイーブなアプローチと効率的なアプローチがあります。それでは、最初に素朴なアプローチを見てみましょう。

  • 整数要素の配列を入力し、配列のサイズを計算して、データを関数に渡します

  • 一時変数countを宣言して、指定された配列で使用できる積の値とのペアの数を格納します。

  • 配列のサイズまでiから0までのループFORを開始します

  • ループ内で、配列のサイズになるまで、jからi+1までの別のループFORを開始します

  • ループ内で、積をarr [i] * arr [j]

    として計算します。
  • 配列のサイズになるまで、kから0までの別のループFORを開始します

  • Kループ内で、IF product =arr [k]を確認してから、カウントを1ずつ増やします

  • カウントを返す

  • 結果を印刷します。

効率的なアプローチ

  • 整数要素の配列を入力し、配列のサイズを計算して、データを関数に渡します

  • 一時変数countを宣言して、指定された配列で使用できる積の値とのペアの数を格納します。

  • プロとして設定されたタイプSTLの変数を作成します

  • 配列のサイズまでiから0までのループFORを開始します

  • ループ内で、設定変数proにarr[i]を挿入します

  • 配列のサイズになるまで、iから0までの別のループFORを開始します

  • ループ内で、配列のサイズになるまで、jからi+1までの別のループFORを開始します

  • 商品をarr[i]* arr [j]

    として設定します
  • IF pro.find(product)!=pro.end()を確認してから、カウントを1ずつ増やします

  • カウントを返す

  • 結果を印刷します。

例(素朴なアプローチ)

#include <bits/stdc++.h>
using namespace std;
int product_pair(int arr[], int size){
   int product = 1;
   int count = 0;
   for(int i = 0 ; i<size ; i++){
      for(int j = i+1;j<size;j++){
         product = arr[i] * arr[j];
         for(int pro = 0 ; pro < size; pro++){
            if(product == arr[pro]){
               count++;
            }
         }
      }
   }
   return count;
}
int main(){
   int arr[] = {6, 2, 3, 1, 5, 10};
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"Count of pairs whose products exist in same array are: "<<product_pair(arr,size);
   return 0;
}

出力

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

Count of pairs whose products exist in same array are: 7

例(効率的なアプローチ)

#include<bits/stdc++.h>
using namespace std;
int product_pair(int arr[], int size){
   set< int > pro;
   int count = 0;
   int product = 1;
   for (int i = 0 ; i < size; i++){
      pro.insert(arr[i]);
   }
   for (int i = 0 ; i < size; i++){
      for (int j = i + 1; j < size ; j++){
         product = arr[i] * arr[j];
         if(pro.find(product) != pro.end()){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = {6, 2, 3, 1, 5, 10};
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"Count of pairs whose products exist in same array are: "<<product_pair(arr,size);
   return 0;
}

出力

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

Count of pairs whose products exist in same array are: 7

  1. C++でソートされたバイナリ配列の1を数えます

    このチュートリアルでは、ソートされたバイナリ配列で1を見つけるプログラムについて説明します。 このために、1と0のみを含む配列が提供されます。私たちのタスクは、配列に存在する1の数を数えることです。 例 #include <bits/stdc++.h> using namespace std; //returning the count of 1 int countOnes(bool arr[], int low, int high){    if (high >= low){       int mid = low + (

  2. 配列内の反転をカウントするC++プログラム

    カウント反転とは、配列をソートするために必要なスイッチの数を意味します。配列がソートされている場合、反転カウント=0。反転カウント=配列が逆の順序でソートされた場合の最大値。 配列内の反転をカウントするC++プログラムを開発しましょう。 アルゴリズム Begin    Function CountInversionArray has arguments a[], n = number of elements.    initialize counter c := 0    for i in range 0 to n-1, do &n