Hazard à l'aide

cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 - 21 mai 2006 à 16:16
cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 - 22 mai 2006 à 09:50
Bonjour à tous
J'ai un probleme je voudrais tirer des nombres au hazard sans retirer 2 fois le meme.
Je debute comme ca. Mon nombre nequipe ne sera jamais le meme c'est lutilisateur qui decide dans l'exemple je mes 10 
nequipe =10;
for

(int a = 1; a < nequipe+1; a++) {
t1 = rand() % nequipe +1;
class[a] = t1;
}
et ici il faut que je verifie qu'il n'y ai pas 2 fois le meme nombre sinon on retire

Dans mon tableau class je ne veut pas 2 fois le meme nombre si il y à 2 fois un meme nombre on retire Comment dois je faire? C'est pour une aplication windows. Et aussi comment savoir si un nombre est pair ou impair? 

Merci de m'aportez votre aide
Signer Ralebole

8 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 mai 2006 à 16:28
http://www.codyx.org/snippet_randomizer_46.aspx




___________________________________________
Les plus grands esprits trouvent toujours une solution
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
21 mai 2006 à 16:28
Class[0] = rand()%nequipe  + 1;

for(int i=1; i<=nequipe; i++)
{
Random:
    t1 = rand()%nequipe + 1;
  
    for(int k=0; k<j; k++)
    {
       if (Class[k] == t1)   //On a trouver le même dans le tableau
             goto Random;
    }
  
    Class[i] = t1;
    j++;
}

//Pour la parité
BOOL Pair(int a)
{
       return !(a % 2);
}

if(!Meilleur("Joky")) return ERREUR;<
0
cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 1
21 mai 2006 à 17:21
Merci j'ai fait un test mais il y a des doublons. 
un exemple de resultat 2-7-6-1-3-3-9-9-5 et il en manque 1  
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 mai 2006 à 18:43
Ainsi pourra compiler sans CRT:

void __stdcall RemplirAleaDwords(DWORD *tab, DWORD count)
{
  DWORD seed, v, i, n;
  if(!count) return;
  seed = GetTickCount(); // srand()
  n = 0;
nextVAL:  v ((seed seed * 214013 + 2531011) >> 16) & 0x7FFF; // rand()  for(i 0; i < n; i++) if(tab[i] v) goto  nextVAL;
  tab[n] = v;
  if(++n < count) goto nextVAL;
}

void __stdcall Tester()
{
  DWORD t[6], i;
  char buf[12];
  RemplirAleaDwords(t, 6);
  for(i = 0; i < 6; i++) {
    bnultoa(t[i], buf);
    MessageBox(0, buf, szappname, 0);
  }
}

ciao...
BruNews, MVP VC++
0

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

Posez votre question
cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 1
21 mai 2006 à 19:13
Merci mais  bnultoa ?
 error C3861: 'bnultoa': identificateur introuvable, même avec une recherche qui dépend de l'argument
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 mai 2006 à 19:17
c'est sa fonction perso. Elle est faite en assembler donc un peu longue. Je crois que son equivalent est ltoa mais je te conseil d'aller la chercher dans une des ses sources. Celle-ci par exemple:

http://www.cppfrance.com/codes/CPU-USAGE-WIN32_23303.aspx

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
22 mai 2006 à 08:46
Bonjour,

Petit algo : génération d'une permutation aléatoire, sans retirage :

#include "stdafx.h"
#include "stdlib.h"
#include "time.h"

#define DIM 10

int main(int argc, char* argv[])
{

    int i,j, t[DIM+1];

    t[1] = 1;
    srand(unsigned(time(NULL)));

    // Tirage
    for ( i = 2; i <= DIM; i++ ) {
        j = rand()%i+1;
        t[i] = t[j];
        t[j] = i;
    }

    // Affichage
    for ( i = 1; i <= DIM; i++ )
        printf("t[%d] = %d\n", i, t[i]);
    return 0;
}
0
cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 1
22 mai 2006 à 09:50
Un gros merci Simple et efficace j'ai fait un test c'est ok .Mais le pire est à venir je pense repasser par la . en gros voila .Pour l'exemple je fais simple 8 equipes (se nombre varie en fonction des inscrits)


Je tire au hazard des equipe pour le premier tour

2 contre 3
7 contre 5
6 contre 1
8 contre 4


Mais voila il y  a le second tour il faut retirer les equipes mais ne pas rejouer contre la meme. chaque equipe possede un tableau avec lequel elles ont deja jouées. et en plus je crois que chaque gagnant dois joué contre un perdant.

Si vous avez du temp a perdre merci de me dire comment dois je mi prendre.
En attendant j'ai deja le premier tour 

Signer ralebole 
0
Rejoignez-nous