|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2008
Città: Sun Valley
Messaggi: 144
|
[C++] rand()
Vorrei sapere se con C++ è possibile far stampare a video 18 numeri casuali da 1 a 18( con la funzione srand(time(NULL)) ) senza che essi si ripetano, cioè ogni numero deve apparire una volta sola.
Grazie in anticipo. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Certo, è possibile, ma non con il solo uso di rand, devi crearti un algoritmo per farlo. Pensaci un po', non è difficile
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Jan 2008
Città: Sun Valley
Messaggi: 144
|
Quote:
__________________
If you don't like NBA, you don't like basketball. LOS ANGELES LAKERS FAN NBA CHAMPIONS |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Potresti fare una cosa del genere:
Codice:
#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>
using namespace std;
int main (void) {
vector<int> numeri;
vector<int>::iterator it;
srand (unsigned(time(NULL)));
for (int i = 1; i <= 18; ++i)
numeri.push_back(i);
random_shuffle(numeri.begin(), numeri.end());
for (it = numeri.begin(); it != numeri.end(); ++it)
cout << *it << " ";
return 0;
}
|
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Jan 2008
Città: Sun Valley
Messaggi: 144
|
Quote:
Per cionci: il tuo metodo qual era? Ci ho pensato un po' ma non ci arrivo...
__________________
If you don't like NBA, you don't like basketball. LOS ANGELES LAKERS FAN NBA CHAMPIONS |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
Esempio: Codice:
void init_random_seq(vector<int>& numeri, int maxvalue)
{
while (numeri.size() < maxvalue){
int n = 1 + (rand() % maxvalue);
if (find(numeri.begin(), numeri.end(), n) == numeri.end())
numeri.push_back(n);
}
}
Ultima modifica di variabilepippo : 04-10-2008 alle 19:28. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quella sopra va benissimo.
Comunque supponendo che la popolazione sia piccola: Codice:
#define N 90
char estratti[N];
srand((unsigned)time(NULL));
memset(estratti, 0, N);
int estrazioniFatte = 0;
//per l'estrazione
int x = (int)((rand() / (RAND_MAX + 1)) * (N - estrazioniFatte));
estrazioniFatte++;
for(int i = 0; i <= x; ++i)
{
x += (estratti[i]) ? 1 : 0;
}
estratti[x] = 1;
// in x c'è il numero (0-based) estratto
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:38.




















