# Mean of array generated by products of all pairs of the given array

Given an array arr[] consisting of N integers, the task is to find the mean of the array formed by the products of unordered pairs of the given array.

Examples:

Input: arr[] = {2, 5, 7}
Output: 19.67
Explanation:
Product of unordered pairs of array arr[] are 2 * 5 = 10, 2 * 7 = 14 and 5 * 7 = 35.
Therefore, the resultant array of product of pairs is {10, 14, 35}.
Mean of the array of product of pairs is 59/3 = 19.67

Input: arr[] = {1, 2, 4, 8}
Output: 11.67
Explanation:
Product of unordered pairs of array arr[] are 1 * 2 = 2, 1 * 4 = 4, 1 * 8 = 8, 2 * 4 = 8, 2 * 8 = 16, 4 * 8 = 32.
Therefore, the resultant array of product of pairs is {2, 4, 8, 8, 16, 32}.
Mean of the array of product of pairs is 70/6 i.e., 11.67

Naive Approach: The simplest approach to solve the problem is to generate all possible pairs of array pairProductArray[] i.e., array formed by the product of unordered pairs of the array arr[]. Then, find the mean of the pairProductArray[]. Follow the steps below to solve the problem:

• Generate all possible pairs of the array arr[] and store their products in pairProductArray[].
• Initialize a variable sum to store the sum of the elements of pairProductArray[].
• Divide the variable sum with the size of pairProductArray[] to get the required mean.
• Finally, print the value of the sum as the resultant mean.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach`   `#include ` `using` `namespace` `std;`   `// Function to find the mean of pair` `// product array of arr[]` `float` `pairProductMean(``int` `arr[], ``int` `N)` `{` `    ``// Store product of pairs` `    ``vector<``int``> pairArray;`   `    ``// Generate all unordered pairs` `    ``for` `(``int` `i = 0; i < N; i++) {` `        ``for` `(``int` `j = i + 1; j < N; j++) {`   `            ``int` `pairProduct` `                ``= arr[i] * arr[j];`   `            ``// Store product of pairs` `            ``pairArray.push_back(pairProduct);` `        ``}` `    ``}`   `    ``// Size of pairArray` `    ``int` `length = pairArray.size();`   `    ``// Store sum of pairArray` `    ``float` `sum = 0;` `    ``for` `(``int` `i = 0; i < length; i++)` `        ``sum += pairArray[i];`   `    ``// Stores the mean of pairArray[]` `    ``float` `mean;`   `    ``// Find mean of pairArray[]` `    ``if` `(length != 0)` `        ``mean = sum / length;` `    ``else` `        ``mean = 0;`   `    ``// Return the resultant mean` `    ``return` `mean;` `}`   `// Driver Code` `int` `main()` `{` `    ``// Given array arr[]` `    ``int` `arr[] = { 1, 2, 4, 8 };`   `    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);`   `    ``// Function Call` `    ``cout << fixed << setprecision(2)` `         ``<< pairProductMean(arr, N);`   `    ``return` `0;` `}`

## Java

 `// Java program for the ` `// above approach` `import` `java.util.*;` `class` `GFG{`   `// Function to find the mean ` `// of pair product array of arr[]` `static` `double`  `pairProductMean(``int` `arr[], ` `                               ``int` `N)` `{` `  ``// Store product of pairs` `  ``Vector pairArray = ` `         ``new` `Vector<>();`   `  ``// Generate all unordered pairs` `  ``for` `(``int` `i = ``0``; i < N; i++) ` `  ``{` `    ``for` `(``int` `j = i + ``1``; j < N; j++)` `    ``{` `      ``int` `pairProduct = arr[i] * ` `                        ``arr[j];`   `      ``// Store product of pairs` `      ``pairArray.add(pairProduct);` `    ``}` `  ``}`   `  ``// Size of pairArray` `  ``int` `length = pairArray.size();`   `  ``// Store sum of pairArray` `  ``float` `sum = ``0``;` `  ``for` `(``int` `i = ``0``; i < length; i++)` `    ``sum += pairArray.get(i);`   `  ``// Stores the mean of ` `  ``// pairArray[]` `  ``float` `mean;`   `  ``// Find mean of pairArray[]` `  ``if` `(length != ``0``)` `    ``mean = sum / length;` `  ``else` `    ``mean = ``0``;`   `  ``// Return the resultant mean` `  ``return` `mean;` `}`   `// Driver Code` `public` `static` `void` `main(String[] args)` `{` `  ``// Given array arr[]` `  ``int` `arr[] = {``1``, ``2``, ``4``, ``8``};`   `  ``int` `N = arr.length;`   `  ``// Function Call`   `  ``System.out.format(``"%.2f"``, ` `                    ``pairProductMean(arr, N));` `}` `}`   `// This code is contributed by shikhasingrajput`

## Python3

 `# Python3 program for the` `# above approach`   `# Function to find the mean` `# of pair product array of arr` `def` `pairProductMean(arr, N):` `  `  `    ``# Store product of pairs` `    ``pairArray ``=` `[];`   `    ``# Generate all unordered` `    ``# pairs` `    ``for` `i ``in` `range``(N):` `        ``for` `j ``in` `range``(i ``+` `1``, N):` `            ``pairProduct ``=` `arr[i] ``*` `arr[j];`   `            ``# Store product of pairs` `            ``pairArray.append(pairProduct);`   `    ``# Size of pairArray` `    ``length ``=` `len``(pairArray);`   `    ``# Store sum of pairArray` `    ``sum` `=` `0``;` `    ``for` `i ``in` `range``(length):` `        ``sum` `+``=` `pairArray[i];`   `    ``# Stores the mean of` `    ``# pairArray` `    ``mean ``=` `0``;`   `    ``# Find mean of pairArray` `    ``if` `(length !``=` `0``):` `        ``mean ``=` `sum` `/` `length;` `    ``else``:` `        ``mean ``=` `0``;`   `    ``# Return the resultant ` `    ``# mean` `    ``return` `mean;`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `  `  `    ``# Given array arr` `    ``arr ``=` `[``1``, ``2``, ``4``, ``8``];`   `    ``N ``=` `len``(arr);`   `    ``# Function Call` `    ``print``(``"{0:.2f}"``.``format``(` `            ``pairProductMean(arr, N)))`   `# This code is contributed by Rajput-Ji`

## C#

 `// C# program for the ` `// above approach` `using` `System;` `using` `System.Collections.Generic;` `class` `GFG{`   `// Function to find the mean ` `// of pair product array of []arr` `static` `double`  `pairProductMean(``int` `[]arr, ` `                               ``int` `N)` `{` `  ``// Store product of pairs` `  ``List<``int``> pairArray = ` `         ``new` `List<``int``>();`   `  ``// Generate all unordered pairs` `  ``for` `(``int` `i = 0; i < N; i++) ` `  ``{` `    ``for` `(``int` `j = i + 1; j < N; j++)` `    ``{` `      ``int` `pairProduct = arr[i] * ` `                        ``arr[j];`   `      ``// Store product of pairs` `      ``pairArray.Add(pairProduct);` `    ``}` `  ``}`   `  ``// Size of pairArray` `  ``int` `length = pairArray.Count;`   `  ``// Store sum of pairArray` `  ``float` `sum = 0;` `  ``for` `(``int` `i = 0; i < length; i++)` `    ``sum += pairArray[i];`   `  ``// Stores the mean of ` `  ``// pairArray[]` `  ``float` `mean;`   `  ``// Find mean of pairArray[]` `  ``if` `(length != 0)` `    ``mean = sum / length;` `  ``else` `    ``mean = 0;`   `  ``// Return the resultant mean` `  ``return` `mean;` `}`   `// Driver Code` `public` `static` `void` `Main(String[] args)` `{` `  ``// Given array []arr` `  ``int` `[]arr = {1, 2, 4, 8};`   `  ``int` `N = arr.Length;`   `  ``// Function Call` `  ``Console.WriteLine(``"{0:F2}"``, ` `                    ``pairProductMean(arr,` `                                    ``N));` `}` `}`   `// This code is contributed by 29AjayKumar`

Output

```11.67

```

Time Complexity: O(N2)
Auxiliary Space: O(N2)

Efficient Approach: The idea is to use the fact that every element arr[i] is multiplied with every element arr[j] which is on the right side of the element arr[i], more formally element at index i is multiplied to all the elements positioned at index j such that j > i. Follow the steps below to solve the problem:

• Create a suffix sum array suffixSumArray[] for the given array arr[].
• Initialize variable res to store the sum of product pairs of array arr[].
• Iterate array arr[] and for each position i incrementing res with arr[i]*suffixSumArray[i+1].
• Divide the variable res with N*(N – 1)/ 2 which is the number of possible products.
• Finally, print the value of res as the resultant mean.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ` `using` `namespace` `std;`   `// Function to find the mean of pair` `// product array of arr[]` `float` `pairProductMean(``int` `arr[], ``int` `N)` `{` `    ``// Initializing suffix sum array` `    ``int` `suffixSumArray[N];` `    ``suffixSumArray[N - 1] = arr[N - 1];`   `    ``// Build suffix sum array` `    ``for` `(``int` `i = N - 2; i >= 0; i--) {` `        ``suffixSumArray[i]` `            ``= suffixSumArray[i + 1]` `              ``+ arr[i];` `    ``}`   `    ``// Size of pairProductArray` `    ``int` `length = (N * (N - 1)) / 2;`   `    ``// Stores sum of pairProductArray` `    ``float` `res = 0;`   `    ``for` `(``int` `i = 0; i < N - 1; i++) {` `        ``res += arr[i]` `               ``* suffixSumArray[i + 1];` `    ``}`   `    ``// Store the mean` `    ``float` `mean;`   `    ``// Find mean of pairProductArray` `    ``if` `(length != 0)` `        ``mean = res / length;` `    ``else` `        ``mean = 0;`   `    ``// Return the resultant mean` `    ``return` `mean;` `}`   `// Driver Code` `int` `main()` `{` `    ``// Given array arr[]` `    ``int` `arr[] = { 1, 2, 4, 8 };` `    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);`   `    ``// Function Call` `    ``cout << fixed << setprecision(2)` `         ``<< pairProductMean(arr, N);`   `    ``return` `0;` `}`

## Java

 `// Java program for the above approach` `import` `java.io.*;` `import` `java.util.*;`   `class` `GFG{` ` `  `// Function to find the mean of pair` `// product array of arr[]` `static` `float` `pairProductMean(``int` `arr[], ``int` `N)` `{` `    `  `    ``// Initializing suffix sum array` `    ``int` `suffixSumArray[] = ``new` `int``[N];` `    ``suffixSumArray[N - ``1``] = arr[N - ``1``];` ` `  `    ``// Build suffix sum array` `    ``for``(``int` `i = N - ``2``; i >= ``0``; i--) ` `    ``{` `        ``suffixSumArray[i] = suffixSumArray[i + ``1``] +` `                                       ``arr[i];` `    ``}` ` `  `    ``// Size of pairProductArray` `    ``int` `length = (N * (N - ``1``)) / ``2``;` ` `  `    ``// Stores sum of pairProductArray` `    ``float` `res = ``0``;` ` `  `    ``for``(``int` `i = ``0``; i < N - ``1``; i++)` `    ``{` `        ``res += arr[i] * ` `               ``suffixSumArray[i + ``1``];` `    ``}` ` `  `    ``// Store the mean` `    ``float` `mean;` ` `  `    ``// Find mean of pairProductArray` `    ``if` `(length != ``0``)` `        ``mean = res / length;` `    ``else` `        ``mean = ``0``;` ` `  `    ``// Return the resultant mean` `    ``return` `mean;` `}`   `// Driver Code` `public` `static` `void` `main (String[] args) ` `{` `    `  `    ``// Given array arr[]` `    ``int` `arr[] = { ``1``, ``2``, ``4``, ``8` `};` `    ``int` `N = arr.length;` ` `  `    ``// Function call` `    ``System.out.format(``"%.2f"``, ` `                      ``pairProductMean(arr, N));` `}` `}`   `// This code is contributed by sanjoy_62`

## Python3

 `# Python3 program for the above approach`   `# Function to find the mean of pair` `# product array of arr[]` `def` `pairProductMean(arr, N):` `    `  `    ``# Initializing suffix sum array` `    ``suffixSumArray ``=` `[``0``] ``*` `N` `    ``suffixSumArray[N ``-` `1``] ``=` `arr[N ``-` `1``]`   `    ``# Build suffix sum array` `    ``for` `i ``in` `range``(N ``-` `2``, ``-``1``, ``-``1``):` `        ``suffixSumArray[i] ``=` `suffixSumArray[i ``+` `1``] ``+` `arr[i]`   `    ``# Size of pairProductArray` `    ``length ``=` `(N ``*` `(N ``-` `1``)) ``/``/` `2`   `    ``# Stores sum of pairProductArray` `    ``res ``=` `0`   `    ``for` `i ``in` `range``(N ``-` `1``):` `        ``res ``+``=` `arr[i] ``*` `suffixSumArray[i ``+` `1``]`   `    ``# Store the mean` `    ``mean ``=` `0`   `    ``# Find mean of pairProductArray` `    ``if` `(length !``=` `0``):` `        ``mean ``=` `res ``/` `length` `    ``else``:` `        ``mean ``=` `0`   `    ``# Return the resultant mean` `    ``return` `mean`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `    `  `    ``# Given array arr[]` `    ``arr ``=` `[ ``1``, ``2``, ``4``, ``8` `]` `    ``N ``=` `len``(arr)`   `    ``# Function Call` `    ``print``(``round``(pairProductMean(arr, N), ``2``))`   `# This code is contributed by mohit kumar 29`

## C#

 `// C# program for the above approach` `using` `System;` ` `  `class` `GFG{` `     `  `// Function to find the mean of pair` `// product array of arr[]` `static` `double` `pairProductMean(``int``[] arr, ``int` `N)` `{` `    `  `    ``// Initializing suffix sum array` `    ``int``[] suffixSumArray = ``new` `int``[N];` `    ``suffixSumArray[N - 1] = arr[N - 1];` `  `  `    ``// Build suffix sum array` `    ``for``(``int` `i = N - 2; i >= 0; i--) ` `    ``{` `        ``suffixSumArray[i] = suffixSumArray[i + 1] +` `                                       ``arr[i];` `    ``}` `  `  `    ``// Size of pairProductArray` `    ``int` `length = (N * (N - 1)) / 2;` `  `  `    ``// Stores sum of pairProductArray` `    ``double` `res = 0;` `  `  `    ``for``(``int` `i = 0; i < N - 1; i++)` `    ``{` `        ``res += arr[i] * ` `               ``suffixSumArray[i + 1];` `    ``}` `  `  `    ``// Store the mean` `    ``double` `mean;` `  `  `    ``// Find mean of pairProductArray` `    ``if` `(length != 0)` `        ``mean = res / length;` `    ``else` `        ``mean = 0;` `  `  `    ``// Return the resultant mean` `    ``return` `mean;` `}` ` `  `// Driver code` `public` `static` `void` `Main()` `{` `    `  `    ``// Given array arr[]` `    ``int``[] arr = { 1, 2, 4, 8 };` `    ``int` `N = arr.Length;` `  `  `    ``// Function call` `    ``Console.WriteLine(``string``.Format(``"{0:0.00}"``,` `                      ``pairProductMean(arr, N)));` `}` `}` ` `  `// This code is contributed by code_hunt`

Output

```11.67

```

Time Complexity: O(N)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Active and well versed member of Competitive Programming

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.