7 risposte

  1. 9

    A seconda di quanti numeri è necessario, la dimensione della matrice, e se la matrice deve mantenere il suo ordine, si potrebbe utilizzare std::random_shuffle per riordinare l’array e poi il ciclo for da 0..n-1 per n numeri casuali. Questo funziona meglio quando si desidera ottenere un sacco di numeri rispetto alla lunghezza dell’array.

    Se che non mi sembra appropriato, si può semplicemente utilizzare srand() e rand() % n come indice dell’array per ottenere una buona approssimazione di una selezione casuale.

    OriginaleL’autore Mark B

  2. 3

    Per il tuo array di dimensione n, basta generare un numero casuale da 0..n-1, quindi selezionare il numero indicizzato nella matrice.

    Basta essere attenti per assicurarsi che si sta dando un’uguale probabilità di ogni elemento. Qualcosa di simile a pavimento(rand(0..1) * n) dovrebbe fare il trucco.
    solo se ti interessa la tracciabilità o allo stesso modo, per una rapida fini, vecchio rand() va bene.

    OriginaleL’autore Péter Török

  3. 2
    int RandomElement(int *array, int size)
    {
       return array[ rand() % size ];     
    }

    se si accetta rand come un generatore di numero casuale.

    OriginaleL’autore corn3lius

  4. 2
    randomElement = arr[rand() % ARRAY_SIZE];

    Questo è l’approccio più semplice. Si potrebbe utilizzare il Boost.Random libreria se si vuole fare qualcosa di più complicato, come assegnare una probabilità ai diversi elementi della matrice.

    OriginaleL’autore Justin Ardini

  5. 1

    rand() % n è spesso praticamente non casuale, almeno con legacy (male) generatori casuali (ci sono un sacco di loro, attenzione).

    Meglio è ((double)rand() /MAX_RAND) * n se si può permettere la conversione. O utilizzare un generatore casuale di cui bit inferiori sono noti per essere casuale, e non di rifiuto sul registro inferiore n bit.

    OriginaleL’autore Alexandre C.

  6. 1

    Se si desidera selezionare due numeri casuali dalla matrice, senza riutilizzare lo stesso numero di il seguente lavoro

    int array[SIZE];
    
    i = rand() % SIZE;
    rand1 = array[i];
    j = 1 + rand() % (SIZE - 2);
    rand2 = array[(i + j) % SIZE];

    OriginaleL’autore torak

  7. 1
      #include<iostream>
      #include<cstdlib>
    
      template<typename T,size_t n>
      T randElem(T (&a)[n])
      {
    
            return a[rand() % n];
      }
    
    
      int main()
      {
          int a[]={1,2,3,4,5};
    
          int n=randElem<int>(a);
          std::cout<<n;
      } 

    OriginaleL’autore Prasoon Saurav

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *