Scegliere un numero da un array

C’è qualche funzione o un metodo di scegliere a caso un numero (o 2 numeri o di più) da una matrice?

possibile duplicato di [Generare un Numero Casuale da risolvere Insieme di numeri in iphone ](stackoverflow.com/questions/2943666/…), Come arrivare 2 random (diversi) elementi da un c++ vector, etc etc.

OriginaleL’autore user336671 | 2010-06-23

7 Replies
  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