 Open in App
Not now

# Find an Array such that mean of this and given Array together equals to K

• Last Updated : 24 Nov, 2021

Given two integers N, K, and an array arr[] consisting of positive integers. The task is to find any possible array of size N such that the mean of arr[] and the array to be found together is K

Examples:

Input: arr[] = {1, 5, 6}, N = 4, K = 3
Output: {1, 2, 3, 3}
Explanation: Mean of {1, 5, 6} and {1, 2, 3, 3} together is the following:
(1 + 5 + 6 + 1 + 2 + 3 + 3) / (3+4) = 3.
Therefore {1, 2, 3, 3} is possible array to make the mean = 3.

Input: arr[] = {7, 8, 6}, N = 2, K = 3
Output: Not Possible

Approach: This problem can be solved by using simple Number System Average concepts. Let’s say sumArr be the sum of array new_arr[] and M to be the size of new_arr[]. Then according to average concept the equation can be formed as:

(sumArr + X) / (N+M) = K, where X is sum of required array.

X = K * (N + M) – sumArr.

Therefore, sum of the required array should be X to make the mean equal to K. If X is less than N, then there is no way to form the array.
The simplest way to form the required array is

1, 1, 1, …(M-1 times), X-(M-1)

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ` `using` `namespace` `std;`   `// Find the required array such that mean of both` `// the arrays is equal to K` `vector<``int``> findArray(vector<``int``> arr,` `                      ``int` `N, ``int` `K)` `{`   `    ``// To store sum of elements in arr[]` `    ``int` `sumArr = 0;`   `    ``int` `M = ``int``(arr.size());`   `    ``// Iterate to find sum` `    ``for` `(``int` `i = 0; i < M; i++) {` `        ``sumArr += arr[i];` `    ``}`   `    ``// According to the formula derived above` `    ``int` `X = K * (N + M) - sumArr;`   `    ``// If requiredSum if less than N` `    ``if` `(X < N) {` `        ``cout << ``"Not Possible"``;` `        ``return` `{};` `    ``}`   `    ``// Otherwise create an array to store answer` `    ``vector<``int``> res(N);`   `    ``// Putting all 1s till N-1` `    ``for` `(``int` `i = 0; i < N - 1; i++) {` `        ``res[i] = 1;` `    ``}`   `    ``res[N - 1] = X - (N - 1);`   `    ``// Return res as the final result` `    ``return` `res;` `}`   `// Driver Code` `int` `main()` `{` `    ``vector<``int``> arr = { 1, 5, 6 };` `    ``int` `N = 4, K = 3;`   `    ``vector<``int``> ans = findArray(arr, N, K);`   `    ``for` `(``int` `i = 0; i < ans.size(); i++)` `        ``cout << ans[i] << ``" "``;` `}`

## Java

 `// Java program for the above approach` `public` `class` `GFG {` `    `  `    ``// Find the required array such that mean of both` `    ``// the arrays is equal to K` `    ``static` `void` `findArray(``int` `[]arr,` `                          ``int` `N, ``int` `K)` `    ``{` `    `  `        ``// To store sum of elements in arr[]` `        ``int` `sumArr = ``0``;` `        ``int` `M = arr.length;` `    `  `        ``// Iterate to find sum` `        ``for` `(``int` `i = ``0``; i < M; i++) {` `            ``sumArr += arr[i];` `        ``}` `    `  `        ``// According to the formula derived above` `        ``int` `X = K * (N + M) - sumArr;` `    `  `        ``// If requiredSum if less than N` `        ``if` `(X < N) {` `            ``System.out.println(``"Not Possible"``);` `        ``}` `    `  `        ``// Otherwise create an array to store answer` `        ``int` `[]res = ``new` `int``[N];` `    `  `        ``// Putting all 1s till N-1` `        ``for` `(``int` `i = ``0``; i < N - ``1``; i++) {` `            ``res[i] = ``1``;` `        ``}` `    `  `        ``res[N - ``1``] = X - (N - ``1``);` `    `  `        ``// Return res as the final result` `        ``for` `(``int` `i = ``0``; i < res.length; i++)` `            ``System.out.print(res[i] + ``" "``);` `    ``}` `    `  `    ``// Driver Code` `    ``public` `static` `void` `main (String[] args)` `    ``{` `        ``int` `[]arr = { ``1``, ``5``, ``6` `};` `        ``int` `N = ``4``, K = ``3``;` `    `  `        ``findArray(arr, N, K);` `    ``}` `}`   `// This code is contributed by AnkThon`

## Python3

 `# python program for the above approach`   `# Find the required array such that mean of both` `# the arrays is equal to K` `def` `findArray(arr, N, K):`   `    ``# To store sum of elements in arr[]` `    ``sumArr ``=` `0` `    ``M ``=` `len``(arr)`   `    ``# Iterate to find sum` `    ``for` `i ``in` `range``(``0``, M):` `        ``sumArr ``+``=` `arr[i]`   `    ``# According to the formula derived above` `    ``X ``=` `K ``*` `(N ``+` `M) ``-` `sumArr`   `    ``# If requiredSum if less than N` `    ``if` `(X < N):` `        ``print``(``"Not Possible"``)` `        ``return` `[]`   `    ``# Otherwise create an array to store answer` `    ``res ``=` `[``0` `for` `_ ``in` `range``(N)]`   `    ``# Putting all 1s till N-1` `    ``for` `i ``in` `range``(``0``, N``-``1``):` `        ``res[i] ``=` `1`   `    ``res[N ``-` `1``] ``=` `X ``-` `(N ``-` `1``)`   `    ``# Return res as the final result` `    ``return` `res`   `# Driver Code` `if` `__name__ ``=``=` `"__main__"``:`   `    ``arr ``=` `[``1``, ``5``, ``6``]` `    ``N ``=` `4` `    ``K ``=` `3`   `    ``ans ``=` `findArray(arr, N, K)`   `    ``for` `i ``in` `range``(``0``, ``len``(ans)):` `        ``print``(ans[i], end``=``" "``)`   `    ``# This code is contributed by rakeshsahni`

## C#

 `// C# program for the above approach` `using` `System;`   `public` `class` `GFG {` `    `  `    ``// Find the required array such that mean of both` `    ``// the arrays is equal to K` `    ``static` `void` `findArray(``int` `[]arr,` `                          ``int` `N, ``int` `K)` `    ``{` `    `  `        ``// To store sum of elements in arr[]` `        ``int` `sumArr = 0;` `        ``int` `M = arr.Length;` `    `  `        ``// Iterate to find sum` `        ``for` `(``int` `i = 0; i < M; i++) {` `            ``sumArr += arr[i];` `        ``}` `    `  `        ``// According to the formula derived above` `        ``int` `X = K * (N + M) - sumArr;` `    `  `        ``// If requiredSum if less than N` `        ``if` `(X < N) {` `            ``Console.WriteLine(``"Not Possible"``);` `        ``}` `    `  `        ``// Otherwise create an array to store answer` `        ``int` `[]res = ``new` `int``[N];` `    `  `        ``// Putting all 1s till N-1` `        ``for` `(``int` `i = 0; i < N - 1; i++) {` `            ``res[i] = 1;` `        ``}` `    `  `        ``res[N - 1] = X - (N - 1);` `    `  `        ``// Return res as the final result` `        ``for` `(``int` `i = 0; i < res.Length; i++)` `            ``Console.Write(res[i] + ``" "``);` `    ``}` `    `  `    ``// Driver Code` `    ``public` `static` `void` `Main (``string``[] args)` `    ``{` `        ``int` `[]arr = { 1, 5, 6 };` `        ``int` `N = 4, K = 3;` `    `  `        ``findArray(arr, N, K);` `    ``}` `}`   `// This code is contributed by AnkThon`

## Javascript

 ``

Output

`1 1 1 6 `

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

My Personal Notes arrow_drop_up
Related Articles