Tirage successif sans remise en C
Résolu/Fermé
A voir également:
- Tirage au sort google sheet
- Google maps satellite - Guide
- Dns google - Guide
- Google earth - Télécharger - 3D
- Google - Guide
- Créer un compte google - Guide
4 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
17 juil. 2017 à 17:36
17 juil. 2017 à 17:36
On peut faire comme l'on ferait avec un 'vrai' jeu de cartes.
On a un jeu de 54 cartes que l'on mélange. Pour obtenir une carte, on prend la dernière du paquet. Pour avoir une autre carte sans remise, on prend la suivante, etc
On a un jeu de 54 cartes que l'on mélange. Pour obtenir une carte, on prend la dernière du paquet. Pour avoir une autre carte sans remise, on prend la suivante, etc
#define NB_CARTES (4*13+2) int jeuNeuf( unsigned char cartes[] ) { for ( unsigned char i = 0 ; i < NB_CARTES ; ++i ) cartes[i] = i; // les cartes comme les indices dans un tableau commencent à 0 return NB_CARTES - 1; // retourne l'indice prochaine carte } int melangerJeu( int cartes[] ) { for ( int i = 0 ; u < NB_CARTES ; ++i ) { int j = rand() % NB_CARTES; // choix d'une position au hasard unsigned char tmp = cartes[i]; // échange de la carte à cette position cartes[i] = cartes[j]; cartes[j] = tmp; } return NB_CARTES - 1; // retourne l'indice prochaine carte } unsigned char carteSuivante( int cartes[] , int* pindice ) { return cartes[*(pindice--)]; // extrait la carte, et passe à l'indice suivant } int main() { unsigned char cartes[NB_CARTES]; jeuNeuf( cartes ); int indice = melangerJeu( cartes ); while ( indice >= 0 ) { // tirer toutes les cartes int carte = carteSuivante( cartes , &indice ); printf( "carte tiree : %u\n" , carte ); } }
17 juil. 2017 à 17:51
petite faute de frappe: "u" en ligne 11.
18 juil. 2017 à 09:49