Nombre au hazard

Résolu
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 28 juil. 2005 à 12:38
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 28 juil. 2005 à 19:25
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 juil. 2005 à 12:51
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++
3
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2005 à 13:07
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é ?
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
28 juil. 2005 à 15:15
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
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 juil. 2005 à 15:28
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])];
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
28 juil. 2005 à 16:22
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="">
3
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2005 à 16:27
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é ?
3
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
28 juil. 2005 à 12:55
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.
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
28 juil. 2005 à 13:10
ok , je fais faire cette solution, merci bcp.
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
28 juil. 2005 à 15:17
oui c sûr, mais je peux générer un nombre entre 1 et 500 et interdire tout sauf 2 et 439
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
28 juil. 2005 à 15:38
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
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
28 juil. 2005 à 15:39
Enfin non, apparemment il veut peu de valeur possible donc c'est bon aussi

void Aurevoir( void ); //Bonne journée
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 juil. 2005 à 15:47
L'arbre sera de toutes facons plus gros que le tableau
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
28 juil. 2005 à 16:25
ben c une solution mais ca me parait un brin compliqué quand même
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 juil. 2005 à 16:31
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?
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2005 à 16:36
la dénomination du #1 est mauvaise
en fait c'est le 'Remove(tree,valForbidden);'

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

Pourquoi faire simple quand on peut faire compliqué ?
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
28 juil. 2005 à 18:38
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="">
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2005 à 19:25
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é ?
0
Rejoignez-nous