Generar array de tamaño N con K media y diferencia mínima entre min y max

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *