Hola estoy tratando de hacer una matriz en la que se inserta un número aleatorio, pero cuando lo hace, la matriz queda en un orden mantenida. Por ejemplo, si la matriz contiene 10 20 30 y el número aleatorio se 11 la función pondría después de las 10 y mover los 20 y los 30 de la lista. Aquí están los requisitos para la función.

  • insertNumber inserta un determinado número aleatorio en la matriz y mantiene el orden.
  • La matriz de datos contiene enteros ordenados desde el índice 0 por el tamaño – 2.
  • randomNum es el entero a insertarse
  • de datos es la matriz que contiene ordenados de enteros
  • tamaño es el número total de elementos que la matriz puede contener

Aquí está mi código hasta el momento. Me estoy haciendo nada en mi salida.

#include"utils.h" 

void insertNumber(int randomNum, int data[], int size)
{
    for(int i = 0; i < 10; i++)
    {
        randomNum = data[i];
        if (randomNum > data[i] && i < size - 2)
        {
            for ( int j = 0; j < 10; j--)
            {
                data[i+1] = data [i];
                i--;
            } 
        }
        data[i] = randomNum;
    }
}

void display(int data[],  int size)
{
    for (int i = 0; size < 10; i++)
    {
        cout << " " << data[i];
    }

}
  • ¿Necesita una matriz, o podría también puedes utilizar un ordenado contenedor?
  • la línea 5 es completamente erróneo. Si la condición nunca se cumplen y para ello usted matriz seguirá siendo siempre el mismo.
  • Puede tratarse de un error tipográfico, pero «el tamaño de la < 10»? Yo creo que debe ser i < tamaño
  • Tengo que usar una matriz.

4 Comentarios

  1. 3

    Puede utilizar std::lower_bound algoritmo de tener una posición de inserción, y un std::vector contenedor para cambiar los elementos con los insert método

  2. 1

    Usted podría utilizar BinarySearch a la búsqueda de su matriz y ver si el número aleatorio existe. Si existe que puede insertar cerca de la existente.

    void binary_search(int A[], int key, int imin, int imax)
    {
      if (imax < imin):
        //Insert key as the next element after imax
      else
        {
          //calculate midpoint to cut set in half
          int imid = midpoint(imin, imax);
    
          //three-way comparison
          if (A[imid] > key)
            //key is in lower subset
            binary_search(A, key, imin, imid-1);
          else if (A[imid] < key)
            //key is in upper subset
            binary_search(A, key, imid+1, imax);
          else
            //key has been found so insert it after imax
        }
    }
    • Que es bueno saber. No creo que la voy a usar en mi tarea, porque aunque sólo se nos permite utilizar las dos funciones que me han dado para mucho en el insertNumber función.
    • Dos funciones con o sin principal? Si sin u puede utilizar binary_search() y void insertar(int a[], int length, int clave, int posición)
  3. 0

    ¿No sería este un mejor forma de llevarlo a cabo?

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <ctime>
    #include <cstdlib>
    
    int main() {
        std::vector<int> randomInts;
        srand(time(0));
        for(int i = 0; i < 10; i++)
            randomInts.push_back((rand()%30)+1); //Inserts random numbers 1-30.
    
        std::sort(randomInts.begin(),randomInts.end());
        for(auto i : randomInts)
            std::cout << i << " ";
    }

    De salida: 3 6 9 13 14 16 19 20 25 30

    • Probablemente iba a ser, pero mi profesor de la universidad sólo quiere una matriz en la que funcionan y que no quiere cambiar nada de lo que él hizo en la principal.
    • él está tratando de hacer de implementar una especie de burbuja?
    • No sólo ordenar después de introducir un número para hacer en orden numérico en la matriz.
    • eso se llama orden de selección, a continuación,.
    • Oh, ya veo. Mal echarle un vistazo a eso.
  4. -1

    Insertar su número al azar después de encontrar el elemento mayor que ella, dentro de su función

    for( i =0; i<size ;i++)
    {
        if(data[i] > randomNumber)
        {
             valueToPush = data[i];
             data[i] = randomNumber;
             randomNumber = valueToPush;
        }
    }
    data[size] = randomNumber
    • Esto es correcto pero subóptima. Este algoritmo se ejecuta en O(n) tiempo, mientras que se puede ejecutar en O(log n) tiempo si usted está utilizando una búsqueda binaria, que es posible, ya que el array está ordenado.

Dejar respuesta

Please enter your comment!
Please enter your name here