Dados dos enteros N y X, la tarea es encontrar un arreglo de salida arr[] que contenga distintos enteros de longitud N tales que su promedio sea K y la diferencia entre el mínimo y el máximo sea la mínima posible.
Entrada: N = 4, X = 8
Salida: – 6 7 9 10
Explicación: Claramente, la media de 6, 7, 9, 10 es 8 y
la diferencia entre el máximo y el mínimo es (10 – 6) = 4.Entrada: N =5, X = 15
Salida: 13 14 15 16 17
Enfoque: El problema se puede resolver con base en la siguiente observación matemática:
- Para que la diferencia entre max y min sea mínima, el espacio entre los elementos ordenados debe ser mínimo.
- Para eso, cada elemento cuando está ordenado debe tener una diferencia mínima con respecto al promedio de la array.
- Entonces, la mitad de los elementos deben estar a la izquierda de K y la mitad a la derecha y deben tener una diferencia = 1 entre ellos.
- Si el valor de N es impar , entonces K puede estar presente en la array.
- Si el valor de N es par , entonces K no puede ser una parte (porque entonces los elementos a la izquierda de K ya la derecha de K no serán los mismos). Los dos elementos del medio serán K-1 y K+1 y todos los elementos en la parte izquierda y la parte derecha tienen una diferencia adyacente = 1.
- Verifique que el tamaño de la array de salida (N) sea par o impar
- Si es par, imprima todos los números desde (MN/2 a M+N/2 ) excepto M.
- De lo contrario, imprima todos los números de (MN/2 a M+N/2) incluyendo M.
C++
// C++ code to implement the approach #include <bits/stdc++.h> using namespace std; // Function to find the output array // of length N whose mean is equal to X void findArray(int n, int x) { int p, q, l; // If array size to be constructed is odd. if (n % 2 != 0) { l = n / 2; p = x - l; q = l + x; for (int i = p; i <= q; i++) cout << i << " "; } // If array size to be constructed is even else { l = n / 2; p = x - l; q = x + l; for (int i = p; i <= q; i++) { if (i != x) cout << i << " "; } } } // Driver code int main() { int N = 4, X = 8; // Function call findArray(N, X); return 0; }
Java
// Java code to implement the approach import java.io.*; class GFG { // Function to find the output array // of length N whose mean is equal to X public static void findArray(int n, int x) { int p = 0, q = 0, l = 0; // If array size to be constructed is odd. if (n % 2 != 0) { l = n / 2; p = x - l; q = l + x; for (int i = p; i <= q; i++) System.out.print(i + " "); } // If array size to be constructed is even else { l = n / 2; p = x - l; q = x + l; for (int i = p; i <= q; i++) { if (i != x) System.out.print(i + " "); } } } // Driver Code public static void main(String[] args) { int N = 4, X = 8; // Function call findArray(N, X); } } // This code is contributed by Rohit Pradhan
Python3
# Python3 code to implement the approach # Function to find the output array # of length N whose mean is equal to X def findArray(n,x): # If array size to be constructed is odd. a=n%2 if (a is not 0): l = int(n / 2) p = int(x - l) q = int(l + x) for i in range(p,q+1): print(i,"",end='') # If array size to be constructed is even else: l = int(n / 2) p = int(x - l) q = int(x + l) for i in range(p,q+1): if (i is not x): print(i,"",end='') # Driver code N = 4 X = 8 # Function call findArray(N,X) # This code is contributed by ashishsingh13122000.
C#
// C# program to implement // the above approach using System; class GFG { // Function to find the output array // of length N whose mean is equal to X public static void findArray(int n, int x) { int p = 0, q = 0, l = 0; // If array size to be constructed is odd. if (n % 2 != 0) { l = n / 2; p = x - l; q = l + x; for (int i = p; i <= q; i++) Console.Write(i + " "); } // If array size to be constructed is even else { l = n / 2; p = x - l; q = x + l; for (int i = p; i <= q; i++) { if (i != x) Console.Write(i + " "); } } } // Driver Code public static void Main() { int N = 4, X = 8; // Function call findArray(N, X); } } // This code is contributed by code_hunt.
Javascript
<script> // Javascript code to implement the approach // Function to find the output array // of length N whose mean is equal to X function findArray(n, x){ let p; let q; let l; // If array size to be constructed is odd. if (n % 2 !== 0) { l = n / 2; p = x - l; q = l + x; for (let i = p; i <= q; i++) document.write(i+" "); } // If array size to be constructed is even else { l = n / 2; p = x - l; q = x + l; for (let i = p; i <= q; i++) { if (i !== x) document.write(i+" "); } } } // Driver code let N = 4; let X = 8; // Function call findArray(N, X); // This code is contributed by ashishsingh13122000. </script>
Producción
6 7 9 10
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por sachinupreti190 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA