Nombre au hazard

Résolu
Signaler
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
-
Bonjour à tous,



Bonjour qq serrait t'il si il est possible de choisir un nombre au
hazart entre 1 et 10 par exemple en interdisant certaine valeur genre 5
ou 6 ?



Par avance, merci.

19 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
do {
r = rand() % 10;
r++;
} while(r != 5 && r != 6);

me suis pas abimé un neurone sur ce coup.
Faudrait voir à réfléchir un tant soit peu, svp.

ciao...
BruNews, MVP VC++
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
Si tu recherches l'éfficacité, tu fais un arbre de toutes les valeurs autorisées, et tu sais combien tu as de valeurs autorisées, tu pioches un nombre entre 1 et n, et tu prends la valeur correspondante (temps O(log(n)))
Bon c'est sur que la complexité d'un tel algorithme est horrible, mais le jour ou tu en auras plus que 500 (ce qui est deja beaucoup), les performances vont chuter.

N.B. : hasard

Pourquoi faire simple quand on peut faire compliqué ?
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
En même temps si tu interdit toute les valeurs sauf 1 et 2 autant généré un nombre entre 1 et 2 lol

void Aurevoir( void ); //Bonne journée
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
JCDjdc> Pourquoi un arbre et pas un tableau?
'Recherche' en O(1)

int val[] = {1, 2, 3, 4, 7, 8, 9}; // valeurs possibles

int r = val[rand() % (sizeof val / sizeof val[0])];
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Je v faire chier mon monde je le sens LOL.

Si tu connais a l'avance les valeurs a exclure, et pour ne perdre ni
trop de rapidité (sauf quand tu as vraiment beaucoup de valeurs a
exclure) ni trop de place avec des tableaux, tu génère un nombre
aléatoire dans chaque tranche de nombre permises (genre entre 1 et 10
sauf 5 ca fait entre 1 et 4 et entre 6 et 10)

Puis tu reprend parmis toutes ces valeurs une valeur au hasard. Mais là tu vas ptet me dire que je cherche trop loin !

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
Oui bien sur, le tableau marche tres bien mais en supposant que l'on connaisse d'avance (i.e. a la compilation) les valeurs autorisées.
S'il veut le faire dynamiquement, alors il faut une structure de données dynamique, pourquoi pas l'arbre ... On pourrait aussi le faire sous forme d'un tableau, mais il faurait construire un nouveau tableau et tout recopier (O(n)).
Dans ce cas il y a deux etapes
#1 l'ajout de valeurs interdites
#2 le choix d'une valeurs autorisées
Apres soit on choisit un cout O(n) pour le #1 et O(1) pour le #2 (version tableau), soit un cout O(ln(O)) pour le #1 et O(ln(n)) pour le #2 (version arbre). (le cout de la suppression d'une valeur dans un arbre doit etre plus petit que O(ln(n)), mais bon il faut voir ...)

Pourquoi faire simple quand on peut faire compliqué ?
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
tu genere un nombre au hazard jusque ce que tu trouve un valeur qui
n'est pas 5 ou 6, ben j'y ais pensé mais je me demandais si ca prendre
pas un peut de temps car il peut arriver que je genere un nombre entre
1 et 500 en interdisant toutes les valeurs sauf 1 et 2.

Merci de ton aide mais je vais faire cette solution vu que y'a rien de prevu dans msdn apparement.
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ok , je fais faire cette solution, merci bcp.
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
oui c sûr, mais je peux générer un nombre entre 1 et 500 et interdire tout sauf 2 et 439
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ouai mais la tout de suite si il doit piocher parmis 500 élements, ça va faire un gros tableau...

void Aurevoir( void ); //Bonne journée
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Enfin non, apparemment il veut peu de valeur possible donc c'est bon aussi

void Aurevoir( void ); //Bonne journée
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
L'arbre sera de toutes facons plus gros que le tableau
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ben c une solution mais ca me parait un brin compliqué quand même
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Ton arbre contient les valeurs autorisées? Il est donc plus long a créer que le tableau.
Pourquoi #1 n'est il pas ajout des valeurs autorisées?
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
la dénomination du #1 est mauvaise
en fait c'est le 'Remove(tree,valForbidden);'

Pourquoi faire simple quand on peut faire compliqué ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Mais il faut remplir ton arbre initialement, ca prend bien O(n) aussi en temps d'exécution...
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
oui mais remplir un tableau aussi ...

Pourquoi faire simple quand on peut faire compliqué ?
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Par conte, il reste quand meme à l'ardre (si j'ai bien compris il
s'agit d'une liste chainée non ?) l'avantage de pouvoir etre libéré de
la mémoire après la génération du nombre aléatoire. Ce n'est peut etre
pas tres important, mais au contraire ca peut l'etre. tout depend du
contexte.

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
4
Comme quoi, un problème simple peut etre tres compliqué

(la creation de l'arbre prend O(n.log(n)))

Pourquoi faire simple quand on peut faire compliqué ?