"Sword Finger Offer" Question 61: The Straight Straight of Playing Cards

// Interview question 61: Straight of playing cards
 /// Title: Randomly draw 5 cards from the playing cards to determine whether it is a straight, that is, whether the 5 cards are continuous.
// 2 to 10 are the numbers themselves, A is 1, J is 11, Q is 12, K is 13, and big and small kings can be regarded as arbitrary numbers. 

#include <cstdio> 
#include <cstdlib> int Compare ( const void * arg1, const void * arg2); bool IsContinuous ( int * numbers, int length) 
{ if (numbers == nullptr || length < 0 )
         return false ; 
    qsort (numbers, length, sizeof ( int ), Compare); int

  


     


    numberOfZero = 0 ;   // Number of size kings 
    for ( int i = 0 ; i <length && numbers [i] == 0 ; i ++ )
         ++ numberOfZero;   // Forget that for loop can have multiple conditions 


    int numberOfGap = 0 ;
     for ( int i = numberOfZero; i <length- 1 ; i ++)   // Start with the first number that is not 0 
    {
         if (numbers [i + 1 ] == numbers [i])   // If there is a pair, then It can't be a straight 
            return  false ; 

        numberOfGap + = (numbers (i +1] - numbers[i] - 1);  //差2 == 间隙1
    }

    return (numberOfZero >= numberOfGap) ? true : false;
}

int Compare(const void* arg1, const void* arg2)
{
    return *(int*) arg1 - *(int*) arg2;
}
// ====================测试代码====================
void Test(const char* testName, int* numbers, int length, bool expected)
{
    if (testName != nullptr)
        printf("%s begins: ", testName);

    if (IsContinuous(numbers, length) == expected)
        printf("Passed.\n");
    else
        printf("Failed.\n");
}

void Test1()
{
    int numbers[] = { 1, 3, 2, 5, 4 };
    Test("Test1", numbers, sizeof(numbers) / sizeof(int), true);
}

void Test2()
{
    int numbers[] = { 1, 3, 2, 6, 4 };
    Test("Test2", numbers, sizeof(numbers) / sizeof(int), false);
}

void Test3()
{
    int numbers[] = { 0, 3, 2, 6, 4 };
    Test("Test3", numbers, sizeof(numbers) / sizeof(int), true);
}

void Test4()
{
    int numbers[] = { 0, 3, 1, 6, 4 };
    Test("Test4", numbers, sizeof(numbers) / sizeof(int), false);
}

void Test5()
{
    int numbers[] = { 1, 3, 0, 5, 0 };
    Test("Test5", numbers, sizeof(numbers) / sizeof(int), true);
}

void Test6()
{
    int numbers[] = { 1, 3, 0, 7, 0 };
    Test("Test6", numbers, sizeof(numbers) / sizeof(int), false);
}

void Test7()
{
    int numbers[] = { 1, 0, 0, 5, 0 };
    Test("Test7", numbers, sizeof(numbers) / sizeof(int), true);
}

void Test8()
{
    int numbers[] = { 1, 0, 0, 7, 0 };
    Test("Test8", numbers, sizeof(numbers) / sizeof(int), false);
}

void Test9()
{
    int numbers[] = { 3, 0, 0, 0, 0 };
    Test("Test9", numbers, sizeof(numbers) / sizeof(int), true);
}

void Test10()
{
    int numbers[] = { 0, 0, 0, 0, 0 };
    Test("Test10", numbers, sizeof(numbers) / sizeof(int), true);
}

// 有对子
void Test11()
{
    int numbers[] = { 1, 0, 0, 1, 0 };
    Test("Test11", numbers, sizeof(numbers) / sizeof(int), false);
}

// 鲁棒性测试
void Test12()
{
    Test("Test12", nullptr, 0, false);
}

int main(int argc, char* argv[])
{
    Test1();
    Test2();
    Test3();
    Test4();
    Test5();
    Test6();
    Test7();
    Test8();
    Test9();
    Test10();
    Test11();
    Test12();

    return 0;
}
Test code

Analysis: It's really simple after modeling.

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        
        int length = numbers.size();
        
        if (length < 1)
            return false;
        
        sort(numbers.begin(), numbers.end());
        
        int numberOfZero = 0;
        for (int i = 0; i < length && numbers[i] == 0; ++i)
            ++numberOfZero;
        
        int numberOfGap = 0;
        for (int i = numberOfZero; i < length - 1; ++i)
        {
            if (numbers[i + 1] == numbers[i])
                return false;
            
            numberOfGap += (numbers[i + 1] - numbers[i] - 1);
        }
        return (numberOfZero >= numberOfGap)? true:false;
    }
};
Niuke submission code

 

Guess you like

Origin www.cnblogs.com/ZSY-blog/p/12686670.html