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

如何在 C# 中实现 Fisher-Yates 洗牌算法来洗一副牌?

DDD
DDD原创
2025-01-05 05:31:38281浏览

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

使用 Fisher-Yates 算法在 C# 中洗牌

在本次编程工作中,我们的目标是将一副牌洗牌的次数为用户想要的。这涉及创建一个利用 System.Random 类生成随机整数的方法并实现 Fisher-Yates shuffle 算法。

现有程序结构:

您提供的代码由几个类组成,包括 Program.cs、Deck.cs、Enums.cs 和 Card.cs。这些类定义了纸牌游戏的结构。

洗牌算法:

为了实现一种众所周知的洗牌算法,称为 Fisher-Yates 洗牌,我们将添加一个名为 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 处的元素。对牌组中的每个元素重复此过程,有效地对元素进行洗牌。

集成到您的代码中:

要将 shuffle 方法集成到您的代码中,您可以使用以下步骤:

  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. In Deck .cs,将以下行添加到 ShuffleCards方法:
FisherYates.Shuffle(deck_ints);
  • 使用 Fisher-Yates 算法洗牌。

按照以下步骤,您可以有效地洗牌一副牌指定次数,并根据需要显示洗后的牌组。

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

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