Hazard à l'aide

Signaler
Messages postés
208
Date d'inscription
mardi 29 novembre 2005
Statut
Membre
Dernière intervention
13 mars 2009
-
Messages postés
208
Date d'inscription
mardi 29 novembre 2005
Statut
Membre
Dernière intervention
13 mars 2009
-
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

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




___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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;<
Messages postés
208
Date d'inscription
mardi 29 novembre 2005
Statut
Membre
Dernière intervention
13 mars 2009
1
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  
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
208
Date d'inscription
mardi 29 novembre 2005
Statut
Membre
Dernière intervention
13 mars 2009
1
Merci mais  bnultoa ?
 error C3861: 'bnultoa': identificateur introuvable, même avec une recherche qui dépend de l'argument
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
14
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;
}
Messages postés
208
Date d'inscription
mardi 29 novembre 2005
Statut
Membre
Dernière intervention
13 mars 2009
1
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