Saltar al contenido

Genere una matriz de tamaño N con K media y diferencia mínima entre min y max

dados dos enteros boreal y X, la tarea es encontrar una matriz de salida Arr[] que contiene enteros diferentes de largo boreal por lo que su media es k y la diferencia entre el minúsculo y el mayor es mínimamente posible.

Aporte: boreal4, X = 8
Salida:- 6 7 9 10
Explicación: La media de 6, 7, 9, 10 es claramente 8 y
La diferencia entre el mayor y el minúsculo es (10 – 6) = 4.

Aporte: boreal = 5, X = 15
Salida: 13 14 15 16 17

Enfoque: El problema se puede resolver con saco en la próximo observación matemática:

  • Para que la diferencia entre max y min sea mínima, el espacio entre los fundamentos ordenados debe ser minúsculo.
  • Para hacer esto, cada tipo regular debe tener una diferencia mínima con respecto a la media de la matriz.
  • Entonces, la fracción de los fundamentos deben estar a la izquierda de K y la otra fracción a la derecha y debe acontecer una diferencia = 1 entre ellos.
    • Si el valía de n es imparentonces K puede estar presente en la matriz.
    • Si el valía de n es par, entonces K no puede ser una parte (porque entonces los fundamentos a la izquierda de K ya la derecha de K no son lo mismo). Los dos fundamentos del medio son K-1 y K+1 y todos los fundamentos en las partes izquierda y derecha tienen una diferencia adyacente = 1.

Siga los pasos a continuación para solucionar este problema según la idea precursor:

  • Comprobar el tamaño de la matriz de salida (NORTE) es par o impar
    • Si es par, imprima todos los números de (MN/2 hasta M+N/2) excepto medida uno mismo.
    • De lo contrario, imprima todos los números de (MN/2 hasta M+N/2) incluido señor.

A continuación se muestra la implementación del enfoque precursor:

C++

 

#include <bits/stdc++.h>

using namespace std;

 

void findArray(int n, int x)

{

    int p, q, l;

 

    

    if (n % 2 != 0) {

        l = n / 2;

        p = x - l;

        q = l + x;

        for (int i = p; i <= q; i++)

            cout << i << " ";

    }

 

    

    else {

        l = n / 2;

        p = x - l;

        q = x + l;

        for (int i = p; i <= q; i++) {

            if (i != x)

                cout << i << " ";

        }

    }

}

 

int main()

{

    int N = 4, X = 8;

 

    

    findArray(N, X);

    return 0;

}

Complejidad del tiempo: EN)
cuarto auxiliar: O(1)