题目:从扑克牌中随机抽取五张牌,判断是不是一个顺子。即这五张牌是不是连续的。2-10为数字本身A为1,J为11,Q为12,K为13,而大小王可以看成任意数字
#include <iostream>
using namespace std;
int comp(const void *arg1, const void *arg2)
{
return *(int*)arg1 - *(int*)arg2;
}
bool IsContinus(int* number, int length)
{
if(number == NULL || length < 1)
return false;
int numOfZero = 0;
int numOfGap = 0;
qsort(number,length,sizeof(int),comp);
for(int i = 0; i < length; i++)
{
if(number[i] == 0)
++numOfZero;
}
int small = numOfZero;
int big = small + 1;
while(big < length)
{
if(number[small] == number[big])
return false;
numOfGap += number[big] - number[small] -1;
small = big;
big++;
}
return (numOfGap > numOfZero) ? false :true;
}
// ====================测试代码====================
void Test(char* testName, int* numbers, int length, bool expected)
{
if(testName != NULL)
printf("%s begins: ", testName);
if(IsContinus(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", NULL, 0, false);
}
int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
Test7();
Test8();
Test9();
Test10();
Test11();
Test12();
return 0;
}