-1

私は自分の C++ クラス用にこの関数を書き、x <= 4 を試し、x >= 4 も試しましたが、トレースを行ったときに、本来のようにループしていません。5 つの数字の配列を取得して並べ替え、その組み合わせがフルハウスになるかどうかをチェックします。

bool isFullHouse(int)
    {
        int match = 0;
        BubbleSort(DiceHeld, 5);
        for ( int x=0; x <= 4; x++ )
        {
            if (((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+2) && (DiceHeld[4] == x+2) && (DiceHeld[5] == x+2)) ||
                ((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+1) && (DiceHeld[4] == x+2) && (DiceHeld[5] == x+2)) ||
                ((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+3) && (DiceHeld[4] == x+3) && (DiceHeld[5] == x+3)) ||
                ((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+1) && (DiceHeld[4] == x+3) && (DiceHeld[5] == x+3)) ||
                ((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+4) && (DiceHeld[4] == x+4) && (DiceHeld[5] == x+4)) ||
                ((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+1) && (DiceHeld[4] == x+4) && (DiceHeld[5] == x+4)) ||
                ((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+5) && (DiceHeld[4] == x+5) && (DiceHeld[5] == x+5)) ||
                ((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+6) && (DiceHeld[4] == x+2) && (DiceHeld[5] == x+2)) ||
                ((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+6) && (DiceHeld[4] == x+6) && (DiceHeld[5] == x+6)) ||
                ((DiceHeld[1] == x+1) && (DiceHeld[2] == x+1) && (DiceHeld[3] == x+1) && (DiceHeld[4] == x+6) && (DiceHeld[5] == x+6)))
            {
                match = 1;
            }
        }
        if (match == 1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
4

2 に答える 2

1

のインデックスはDiceHeldおそらく0から4まで実行する必要があります。コンパイラとデバッガによっては、メモリエラーが明らかにならない場合がありますが、それでも発生します。

またmatch、ループを終了した後は1ではないに違いありません。

于 2012-05-17T14:24:07.930 に答える
1

面白いことに、これほど重い if ロジックや並べ替えを必要としないバージョンがあります。



static const int kNumDice = 5;

bool isFullHouse()
{
    // There are only 2 possible patterns for full house on a set of numbers, sorted or not
    // Either the first 3 dice have the same value and the 4th and 5th dice are the same
    // or the first 2 dice match and the 3rd, 4th, 5th dice match 

    int currentMatch = DiceHeld[0];
    int uniqueValues = 1;
    int matchLength = 1;

    for(int i=1; i<kNumDice; i++)
    {
        // Start next match
        if(DiceHeld[i] != currentMatch)
        {
            if(matchLength < 2)
            {
                return false; 
            }

            if(++uniqueValues > 2)
            {
                return false;
            }

            currentMatch = DiceHeld[i];
            matchLength = 1;
        }
        else if(++matchLength > 3)
        {
            return false;
        }
    }

    return true;
}
于 2012-05-17T15:11:55.690 に答える