Math 扑克牌组合

Math 扑克牌组合,math,combinations,permutation,poker,variations,Math,Combinations,Permutation,Poker,Variations,Hy,我想数一数玩家可以在一只手上得到的所有扑克牌组合,并显示所有这些组合。我不在乎有多少双,满座等等。我只想数一数玩家能得到的所有可能的牌数。因此,一手牌由5张牌组成,必须有4种颜色(套装),一套套装必须重复。最多4个号码相同,第5张卡的号码必须不同。所有可能的手部组合的正确结果必须为2598960(5以上的52为2598960)。我只需要使用我的代码得到正确的结果,但我不知道如何编写算法。 我有卡.cs类: class card { private int number; p

Hy,我想数一数玩家可以在一只手上得到的所有扑克牌组合,并显示所有这些组合。我不在乎有多少双,满座等等。我只想数一数玩家能得到的所有可能的牌数。因此,一手牌由5张牌组成,必须有4种颜色(套装),一套套装必须重复。最多4个号码相同,第5张卡的号码必须不同。所有可能的手部组合的正确结果必须为2598960(5以上的52为2598960)。我只需要使用我的代码得到正确的结果,但我不知道如何编写算法。
我有
.cs类:

class card
{
    private int number;
    private char suit;

    public card(int _number, char _suit)
    {
        this.number = _number;
        this.suit = _suit;
    }

    public int Number
    {
        get{return this.number;}
        set{this.number = value;}
    }

    public char Suit
    {
        get { return this.suit; }
        set { this.suit = value; }
    }

}
程序
.cs类中,我有Main和以下代码:

static void Main(string[] args)
    {
        char[] suits = { '\u2660', '\u2663', '\u2665', '\u2666' }; //Spades, Clubs, Hearts, Diamonds
        int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
        int cnt = 0;

        List<card> deck = new List<card>();

        //making deck
        foreach (char suit in suits)
        {
            foreach (int number in numbers)
            {
                deck.Add(new card(number, suit));
            }
        }

        foreach (card first in deck)
        {
            foreach (card second in deck)
            {
                if (second.Number != first.Number)
                {
                    foreach (card third in deck)
                    {
                        if (third.Number != second.Number && third.Number != first.Number)
                        {
                            foreach (card fourth in deck)
                            {
                                if (fourth.Number != third.Number && fourth.Number != second.Number && fourth.Number != first.Number)
                                {
                                    foreach (card fifth in deck)
                                    {
                                        if (fifth.Suit != first.Suit && fifth.Suit != second.Suit && fifth.Suit != third.Suit && fifth.Suit != fourth.Suit)
                                        {
                                            //Console.WriteLine("{0}{1}   {2}{3}     {4}{5}   {6}{7}    {8}{9}", first.Number, first.Suit, second.Number, second.Suit, third.Number, third.Suit, fourth.Number, fourth.Suit, fifth.Number, fifth.Suit);
                                            cnt++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        Console.WriteLine("Combinations: {0}", cnt);//Result must be: 2598960
    }
static void Main(字符串[]args)
{
char[]suits={'\u2660','\u2663','\u2665','\u2666'};//黑桃、梅花、红桃、钻石
int[]数字={1,2,3,4,5,6,7,8,9,10,11,12,13};
int-cnt=0;
列表组=新列表();
//制作甲板
foreach(一套中一套)
{
foreach(整数中的整数)
{
增加(新卡(号码,套装));
}
}
foreach(牌组中的第一张牌)
{
foreach(牌组中的第二张牌)
{
if(第二个数字!=第一个数字)
{
foreach(牌组中的第三张牌)
{
if(third.Number!=second.Number&&third.Number!=first.Number)
{
foreach(牌组中的第四张牌)
{
if(第四个数!=第三个数和第四个数!=第二个数和第四个数!=第一个数)
{
foreach(牌组中的第五张牌)
{
如果(第五套西装!=第一套西装和第五套西装!=第二套西装和第五套西装!=第三套西装和第五套西装!=第四套西装)
{
//Console.WriteLine(“{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}”,第一。号码,第一。西装,第二。号码,第二。西装,第三。号码,第四。号码,第四。西装,第五。号码,第五。西装);
cnt++;
}
}
}
}
}
}
}
}
}
WriteLine(“组合:{0}”,cnt);//结果必须是:2598960
}

好吧,尽管我非常感谢你所做的一切,但我发现这更容易阅读:

int count = 0;
int cards_amount = 52;
for (var first = 0; first < cards_amount-4; first++)
    for (var second = first + 1; second < cards_amount-3; second++)
        for (var third = second+1; third < cards_amount-2; third++)
            for (var fourth = third+1; fourth < cards_amount-1; fourth++)
                for (var fifth = fourth+1; fifth < cards_amount; fifth++)
                    count++;
您可能希望在您的
课程卡上执行此操作:

public override string ToString() {
        // have this print your card number & suit
}
然后,只需更改
count++与此对应的行:

{
   count ++;
   Console.WriteLine("{0},{1},{2},{3},{4}", deck_array[first], deck_array[second], 
       deck_array[third] , deck_array[fourth] , deck_array[fifth] );
}

解决了。。。(现在你的卡片知道如何打印自己,而你只是在最后打印手。

好吧,虽然我很欣赏你所做的,但我发现这更容易阅读:

int count = 0;
int cards_amount = 52;
for (var first = 0; first < cards_amount-4; first++)
    for (var second = first + 1; second < cards_amount-3; second++)
        for (var third = second+1; third < cards_amount-2; third++)
            for (var fourth = third+1; fourth < cards_amount-1; fourth++)
                for (var fifth = fourth+1; fifth < cards_amount; fifth++)
                    count++;
您可能希望在您的
课程卡上执行此操作:

public override string ToString() {
        // have this print your card number & suit
}
然后,只需使用以下命令更改
count++;
行:

{
   count ++;
   Console.WriteLine("{0},{1},{2},{3},{4}", deck_array[first], deck_array[second], 
       deck_array[third] , deck_array[fourth] , deck_array[fifth] );
}

解决了…(现在你的卡片知道如何打印自己,而你只是在最后打印手。

好吧,虽然我很欣赏你所做的,但我发现这更容易阅读:

int count = 0;
int cards_amount = 52;
for (var first = 0; first < cards_amount-4; first++)
    for (var second = first + 1; second < cards_amount-3; second++)
        for (var third = second+1; third < cards_amount-2; third++)
            for (var fourth = third+1; fourth < cards_amount-1; fourth++)
                for (var fifth = fourth+1; fifth < cards_amount; fifth++)
                    count++;
您可能希望在您的
课程卡上执行此操作:

public override string ToString() {
        // have this print your card number & suit
}
然后,只需使用以下命令更改
count++;
行:

{
   count ++;
   Console.WriteLine("{0},{1},{2},{3},{4}", deck_array[first], deck_array[second], 
       deck_array[third] , deck_array[fourth] , deck_array[fifth] );
}

解决了…(现在你的卡片知道如何打印自己,而你只是在最后打印手。

好吧,虽然我很欣赏你所做的,但我发现这更容易阅读:

int count = 0;
int cards_amount = 52;
for (var first = 0; first < cards_amount-4; first++)
    for (var second = first + 1; second < cards_amount-3; second++)
        for (var third = second+1; third < cards_amount-2; third++)
            for (var fourth = third+1; fourth < cards_amount-1; fourth++)
                for (var fifth = fourth+1; fifth < cards_amount; fifth++)
                    count++;
您可能希望在您的
课程卡上执行此操作:

public override string ToString() {
        // have this print your card number & suit
}
然后,只需使用以下命令更改
count++;
行:

{
   count ++;
   Console.WriteLine("{0},{1},{2},{3},{4}", deck_array[first], deck_array[second], 
       deck_array[third] , deck_array[fourth] , deck_array[fifth] );
}

解决了。。。(现在你的卡片知道如何打印自己,而你只是在最后打印手。

如果你已经知道答案,为什么你需要这样做?这是我的数学研讨会…如果你已经知道答案,为什么你需要这样做?这是我的数学研讨会…如果你已经知道答案,为什么你需要这样做?这是我的数学研讨会…为什么如果你已经知道答案,你需要这样做吗?这是我的数学研讨会…谢谢你的帮助,但我需要让我的程序写下所有可能的手,包括数字和卡片套装,最后计算所有可能的组合,就像我试图在上面的代码中做的那样…谢谢你的帮助,但我需要让我的程序成为我的程序我写所有可能的牌,包括号码和套牌,以及所有可能组合的结束计数,就像我试图在上面的代码中做的那样…谢谢你的帮助,但我需要让我的程序写所有可能的牌,包括号码和套牌,以及所有可能组合的结束计数,等等就像我试着在上面的代码中做的那样…谢谢你的帮助,但是我需要让我的程序写下所有可能的手,包括数字和套牌,以及所有可能的组合的最终计数,就像我试着在上面的代码中做的一样。。。