Mélange de cartes en C#
Un exercice de programmation courant consiste à écrire une simulation de mélange de cartes dans un langage donné. Cette question explore le mélange d'un jeu de cartes et l'interrogation de l'utilisateur sur le nombre de mélanges.
Énoncé du problème
Le code fourni comprend des classes pour un jeu, une carte et costume, ainsi qu'un programme pour afficher l'ordre initial des cartes et prendre en compte les données de l'utilisateur sur le nombre de mélanges. Le défi réside dans la mise en œuvre du mécanisme de brassage.
Solution
Le mélange Fisher-Yates, également connu sous le nom de mélange Knuth, est un algorithme largement utilisé pour mélanger un tableau. en place. Le code mis à jour intègre cet algorithme :
classe publique statique FisherYates<br>{</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">static Random r = new Random();
static public void Shuffle(Card[] deck)</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">{ for (int n = deck.Length - 1; n > 0; --n) { int k = r.Next(n+1); Card temp = deck[n]; deck[n] = deck[k]; deck[k] = temp; } }
}
Cette classe définit une méthode statique, Shuffle, qui prend un tableau de cartes comme saisir. Il parcourt ensuite le jeu dans l'ordre inverse, en sélectionnant une carte aléatoire à échanger avec la carte actuelle. En itérant sur l'ensemble du deck, l'algorithme garantit un mixage minutieux.
Implémentation
Pour incorporer le shuffle dans le code d'origine, ajoutez un appel à la méthode Shuffle dans le fichier Méthode principale de la classe Program après obtention du nombre de lectures aléatoires de l'utilisateur :
Deck myDeck = new Pont(); // Créer un nouveau deck<br>int numShuffles = Int32.Parse(Console.ReadLine()); // Lire les entrées de l'utilisateur sur les mélanges souhaités<br>FisherYates.Shuffle(myDeck.Cards); // Mélangez le jeu le nombre de fois souhaité<br>pour chaque (Carte c dans myDeck.Cards) // Imprimez le jeu mélangé<br>{</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Console.WriteLine(c);
}
Conclusion
L'intégration de l'algorithme de lecture aléatoire Fisher-Yates permet une mélange du jeu de cartes et satisfait à l'exigence de nombre de mélanges spécifié par l'utilisateur. Le code génère le jeu mélangé comme demandé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!