ホームページ > バックエンド開発 > C++ > ユーザー指定のシャッフルに基づいて C# でトランプのデッキを効率的にシャッフルするにはどうすればよいですか?

ユーザー指定のシャッフルに基づいて C# でトランプのデッキを効率的にシャッフルするにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-03 13:10:38
オリジナル
290 人が閲覧しました

How can I efficiently shuffle a deck of cards in C# based on user-specified shuffles?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:プログラミングにおいてハッシュコードはどのようにしてオブジェクトを一意に識別するのでしょうか? 次の記事:浮動小数点の除算は常に乗算より遅いですか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート