C# でのカード シャッフル
一般的なプログラミング演習では、特定の言語でカード シャッフルのシミュレーションを作成します。この質問では、トランプのデッキをシャッフルし、ユーザーにシャッフルの回数を問い合わせます。
問題の説明
提供されたコードには、デッキ、カード、およびカードのクラスが含まれています。このスーツには、最初のカードの順序を表示し、シャッフルの回数に関するユーザー入力を受け取るプログラムも含まれています。課題は、シャッフル メカニズムの実装にあります。
解決策
フィッシャー・イェーツ シャッフルは、クヌース シャッフルとも呼ばれ、配列をシャッフルするために広く使用されているアルゴリズムです。所定の位置にあります。更新されたコードには、次のアルゴリズムが組み込まれています。
static public class 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[]デッキ)</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; } }
}
このクラスは、カードの配列を次のように受け取る静的メソッド Shuffle を定義します。入力。次に、デッキを逆の順序で繰り返し、現在のカードと交換するランダムなカードを選択します。デッキ全体を反復処理することで、アルゴリズムは完全な混合を保証します。
実装
シャッフルを元のコードに組み込むには、Shuffle メソッドへの呼び出しをユーザーからシャッフル数を取得した後の Program クラスの main メソッド:
Deck myDeck = 新しいデッキ(); // 新しいデッキを作成します<br>int numShuffles = Int32.Parse(Console.ReadLine()); // 希望のシャッフルでユーザー入力を読み取ります<br>FisherYates.Shuffle(myDeck.Cards); // 必要な回数だけデッキをシャッフルします<br>foreach (Card c in myDeck.Cards) // シャッフルしたデッキを印刷します<br>{</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Console.WriteLine(c);
}
結論
Fisher-Yates シャッフル アルゴリズムにより、カード デッキの効率的なシャッフルが可能になり、ユーザー指定のシャッフル カウントの要件を満たします。このコードは、要求に応じてシャッフルされたデッキを出力します。
以上がユーザー指定のシャッフルに基づいて C# でトランプのデッキを効率的にシャッフルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。