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

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

DDD
DDDオリジナル
2025-01-05 05:31:38314ブラウズ

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

Fisher-Yates アルゴリズムを使用した C# でのカード シャッフル

このプログラミングの取り組みでは、トランプのデッキを何回もシャッフルすることを目指しています。ユーザーが望むもの。これには、System.Random クラスを利用してランダムな整数を生成するメソッドの作成と、Fisher-Yates シャッフル アルゴリズムの実装が含まれます。

既存のプログラム構造:

提供されたコードProgram.cs、Deck.cs、Enums.cs、Card.cs などの複数のクラスで構成されます。これらのクラスは、カード ゲームの構造を定義します。

カード シャッフル アルゴリズム:

フィッシャー・イェーツ シャッフルとして知られるよく知られたシャッフル アルゴリズムを実装するには、次のようにします。 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;
    }
}

このメソッドでは、0 から n の範囲内でランダムなインデックス k を生成し、インデックス n と k の要素を交換します。このプロセスはデッキ内の要素ごとに繰り返され、要素が効果的にシャッフルされます。

コードへの統合:

シャッフル メソッドをコードに統合するには、次のことができます。次の手順を使用します。

  1. Program.cs で、Main の最後に次の行を追加します。メソッド:
int[] deck_ints = new int[52];
for (int i = 0; i < deck_ints.Length; i++)
{
    deck_ints[i] = i;
}

int num_shuffles = int.Parse(Console.ReadLine());
  • これは、ユーザーからシャッフルの数を読み取り、デッキを整数の配列として初期化します。
  1. デッキ内.cs、次の行を ShuffleCards に追加します。メソッド:
FisherYates.Shuffle(deck_ints);
  • これは、フィッシャー・イェーツ アルゴリズムを使用してデッキをシャッフルします。

これらの手順に従うことで、カードのデッキを効果的にシャッフルできます指定した回数だけシャッフルされたデッキを表示します。

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

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