首页 >后端开发 >C++ >如何在 C# 中实现 Fisher-Yates 洗牌来随机化一副​​牌?

如何在 C# 中实现 Fisher-Yates 洗牌来随机化一副​​牌?

DDD
DDD原创
2025-01-04 14:49:44919浏览

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 是使用的 Random 对象生成随机索引。
    • 该算法从迭代中的最后一个元素开始
    • 对于每个元素(用 n 表示),会在 [0, n] 范围内生成一个随机索引 k。
    • 交换索引 n 和 k 处的值以实现随机排列。
  2. 打乱Deck:

    在你的 Deck 类中,创建一个方法来调用卡片数组(卡片)上的 FisherYates.Shuffle() 方法:

    public void Shuffle()
    {
        FisherYates.Shuffle(cards);
    }
  3. 更新程序:

    在 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. 显示洗好的牌:

    最后,再次迭代这副牌中的牌并显示洗后的牌顺序:

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

按照以下步骤,您可以创建一个程序,可以根据用户所需的洗牌次数来洗牌一副牌,并显示洗好的牌。

以上是如何在 C# 中实现 Fisher-Yates 洗牌来随机化一副​​牌?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn