ホームページ >バックエンド開発 >C++ >C# でカードの山をランダム化するフィッシャー・イェーツ シャッフルを実装するにはどうすればよいですか?

C# でカードの山をランダム化するフィッシャー・イェーツ シャッフルを実装するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-04 14:49:44879ブラウズ

How Can I Implement a Fisher-Yates Shuffle to Randomize a Deck of Cards in C#?

C# でトランプのデッキをシャッフルする

トランプのデッキをシャッフルできるプログラムを作成するには、シャッフル アルゴリズムの実装が必要です。 Fisher-Yates シャッフル アルゴリズムは、指定されたリストのランダムな置換を保証する広く使用されている手法です。

このアルゴリズムを C# で実装するには、次の手順を検討してください:

  1. Fisher-Yates Shuffle クラスの作成:

    静的クラスを定義する次のメソッドを含む FisherYates というクラス:

    static public void Shuffle(int[] deck)
    {
        for (int n = deck.Length - 1; n > 0; --n)
        {
            int k = r.Next(n + 1);
            int temp = deck[n];
            deck[n] = deck[k];
            deck[k] = temp;
        }
    }

    このメソッド内:

    • deck はカードを表す整数の配列です。
    • r はランダムですランダムなインデックスを生成するために使用されるオブジェクト。
    • アルゴリズムは、オブジェクトの最後の要素から反復して開始されます。 Deck.
    • 各要素 (n で表される) に対して、[0, n] の範囲内でランダムなインデックス k が生成されます。
    • インデックス n と k の値が交換されて、ランダムな順列。
  2. シャッフルDeck:

    Deck クラスで、カードの配列 (カード) に対して FisherYates.Shuffle() メソッドを呼び出すメソッドを作成します:

    public void Shuffle()
    {
        FisherYates.Shuffle(cards);
    }
  3. プログラムの更新:

    Program クラスの Main() メソッドは、カードの最初のリストを表示した後、デッキをシャッフルする回数をユーザーに尋ねます。次に、デッキ上で Shuffle() メソッドを指定された回数呼び出します:

    Console.WriteLine("How Many Times Do You Want To Shuffle?");
    int numShuffles = int.Parse(Console.ReadLine());
    
    for (int i = 0; i < numShuffles; i++)
    {
        mydeck.Shuffle();
    }
  4. シャッフルされたカードの表示:

    最後に、デッキ内のカードを再度繰り返し、シャッフルされたカードを表示します。 order:

    foreach (Card c in mydeck.Cards)
    {
        Console.WriteLine(c);
    }

これらの手順に従って、ユーザーが希望するシャッフル回数に従ってトランプをシャッフルし、シャッフルされたカードを表示するプログラムを作成できます。

以上がC# でカードの山をランダム化するフィッシャー・イェーツ シャッフルを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。