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), (2,5) (乘積為10).

下面程式中使用的方法如下

解決給定問題有多種方法,即樸素方法和高效方法。讓我們首先看看樸素方法。

  • 輸入一個整數元素陣列,計算陣列的大小並將資料傳遞給函式。

  • 宣告一個名為count的臨時變數來儲存具有在給定陣列中存在的乘積值的數對的數量。

  • 從i=0開始迴圈到陣列大小

  • 在迴圈內,從j=i+1開始另一個迴圈到陣列大小

  • 在迴圈內計算乘積為 arr[i] * arr[j]

  • 從k=0開始另一個迴圈到陣列大小

  • 在K迴圈內,如果乘積 = arr[k],則將計數加1

  • 返回計數

  • 列印結果。

高效方法

  • 輸入一個整數元素陣列,計算陣列的大小並將資料傳遞給函式。

  • 宣告一個名為count的臨時變數來儲存具有在給定陣列中存在的乘積值的數對的數量。

  • 建立一個STL集合型別的變數 pro

  • 從i=0開始迴圈到陣列大小

  • 在迴圈內,將arr[i]插入到集合變數 pro 中

  • 從i=0開始另一個迴圈到陣列大小

  • 在迴圈內,從j=i+1開始另一個迴圈到陣列大小

  • 將乘積設定為 arr[i] * arr[j]

  • 如果 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

更新於:2020年10月31日

瀏覽量 124

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.