使用 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 方法集成到您的代码中,您可以使用以下步骤:
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());
FisherYates.Shuffle(deck_ints);
按照以下步骤,您可以有效地洗牌一副牌指定次数,并根据需要显示洗后的牌组。
以上是如何在 C# 中实现 Fisher-Yates 洗牌算法来洗一副牌?的详细内容。更多信息请关注PHP中文网其他相关文章!