0

プレイヤーが 1 つのハンドで得ることができるすべてのポーカー カードの組み合わせを数え、そのすべての組み合わせを表示したいと思います。ペア、フルハウスなど、何組でも構いません。プレイヤーが獲得できるすべての可能な手を数えたいだけです。したがって、1 つのハンドは 5 枚のカードで構成され、4 つの色 (スート) が必要であり、1 つのスートを繰り返さなければなりません。最大で 4 つの数字が同じで、5 番目のカードの数字は異なる必要があります。すべての可能な手の組み合わせの正しい結果は 2598960 でなければなりません (5 の上の 52 は 2598960 です)。コードを使用して正しい結果を取得する必要があるだけですが、アルゴリズムの書き方がわかりません。
私はcard.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 クラスにProgramは、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
    }
4

1 に答える 1