首頁 >後端開發 >C++ >如何在 C# 中實現 Fisher-Yates 洗牌來隨機化一副牌?

如何在 C# 中實現 Fisher-Yates 洗牌來隨機化一副牌?

DDD
DDD原創
2025-01-04 14:49:44873瀏覽

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

用 C# 洗牌

建立一個可以洗牌的程式需要實作洗牌演算法。 Fisher-Yates 洗牌演算法是一種廣泛使用的技術,可確保給定清單的隨機排列。

要在C# 中實作此演算法,請考慮以下步驟:

  1. 建立Fisher-Yates Shuffle 類別:

    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;
        }
    }

    • 定義一個名為的靜態類別FisherYates包含以下方法:
  2. 在此方法中:

    deck 是代表卡片的整數陣列。

    r 是使用的 Random 物件產生隨機索引。

    public void Shuffle()
    {
        FisherYates.Shuffle(cards);
    }
    演算法從迭代中的最後一個元素開始
  3. 對於每個元素(以 n 表示),會在 [0, n] 範圍內產生一個隨機索引 k。

    交換索引 n 和 k 處的值以實現隨機排列。

    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. 打亂Deck:
  5. 在你的Deck 類別中,建立一個方法來呼叫卡片數組(卡片)上的FisherYates.Shuffle()方法:

    foreach (Card c in mydeck.Cards)
    {
        Console.WriteLine(c);
    }
  6. 更新程式:

在Main() 方法中在您的程式類別中,顯示初始卡片清單後,詢問使用者想要洗牌的次數。然後,呼叫牌組上的 Shuffle()方法指定次數:顯示洗好的牌:最後,再次迭代這副牌中的牌並顯示洗好的牌後的牌順序:按照以下步驟,您可以建立一個程序,可以根據使用者所需的洗牌次數來洗牌一副牌,並顯示洗好的牌。

以上是如何在 C# 中實現 Fisher-Yates 洗牌來隨機化一副牌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn