作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
标准的 52 张卡片组可以使用整数值表示:{0,1,..,50,51}。一手标准的扑克手包含来自该集合的 5 个值,没有重复。
要表示一副牌中所有 52C5 唯一的手牌,可以使用以下循环:
for (int card1 = 0; card1 < 48; card1++)
{
for (int card2 = card1 + 1; card2 < 49; card2++)
{
for (int card3 = card2 + 1; card3 < 50; card3++)
{
for (int card4 = card3 + 1; card4 < 51; card4++)
{
for (int card5 = card4 + 1; card5 < 52; card5++)
{
var handAbcde = new List<int> { card1, card2, card3, card4, card5 };
// do something with the hand...
}
}
}
}
}
我想知道如何使它成为一个递归函数。我尝试过,但我无法保留卡片从最低到最高的顺序,就像上面的 for
循环一样。
所需输出示例:(观察从最低到最高的连续排序,不重复)
0 1 2 3 4
0 1 2 3 5
0 1 2 3 6
.
.
.
47 48 49 50 49
47 48 49 50 50
47 48 49 50 51
最佳答案
这里有一个有用的扩展方法,它使用递归来做你想做的事情:
public static IEnumerable<IEnumerable<T>> GetPermutations<T>(this IEnumerable<T> items, int count)
{
int i = 0;
foreach (var item in items)
{
if (count == 1) yield return new T[] { item };
else foreach (var result in items.Skip(i + 1).GetPermutations(count - 1))
yield return new T[] { item }.Concat(result);
++i;
}
}
下面是一个示例,用于从一副 52 张牌中生成五张牌的所有可能组合:
foreach (var hand in Enumerable.Range(0, 52).GetPermutations(5))
{
foreach (var card in hand)
Console.Write(card + " ");
Console.WriteLine();
}
关于c# - 从甲板上递归处理纸牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18242888/
我已经创建了我的牌组,可以处理每张牌和一套花色,直到没有牌为止。对于我的项目,我需要将它分成 3 个类,其中包括一个驱动程序类。我首先创建了一个包含所有内容的类,所以我知道如何让它全部工作。 publ
嘿伙计们,我正在学习我的第一个 Java 类(class),但在尝试编译该程序时遇到了错误代码。我附加了这两门类(class),希望他能帮助我找到错误。这是我收到的错误: Error: constru
这个问题在这里已经有了答案: How to randomly shuffle a deck of cards among players? (3 个答案) 关闭 4 年前。 我一直在尝试学习 Pyt
我是一名优秀的程序员,十分优秀!