Playing cards, playing cards
Question: randomly draw 5 cards from playing cards to determine whether the cards are continuous or not. 2-10 is the number itself, A is 1, J is 11, Q is 12, K is 13, and the king of size can be seen as any number.
Idea: sort the array, count the number of zeros in the array, and count the number of vacancies between adjacent numbers in the sorted array. If the total number of vacancies is less than or equal to 0, this array is continuous; otherwise, it is not continuous. Finally, we need to note that if the non-zero number in the array repeats, the array is not continuous. Instead, the playing card description means that if a deck contains a pair, it cannot be a good match.
1 #include "stdafx.h" 2 #include <stdlib.h> 3 4 int compare(const void* arg1, const void* arg2); 5 6 bool IsContinuous(int* numbers, int length) 7 { 8 if(numbers == NULL || length < 1) 9 return false; 10 11 qsort(numbers, length, sizeof(int), compare); 12 13 int numberOfZero = 0; 14 int numberOfGap = 0; 15 16 for(int i = 0 ; i < length && numbers[i] == 0 ; ++ i) 17 ++ numberOfZero; 18 19 int small = numberOfZero; 20 int big = small + 1; 21 22 while(big < length) 23 { 24 if(numbers[small] == numbers[big]) 25 return false; 26 27 numberOfGap += numbers[big] -numbers[small] - 1; 28 small = big; 29 30 ++ big; 31 } 32 33 return (numberOfGap > numberOfZero) ? false : true; 34 } 35 36 int compare(const void* arg1, const void * arg2) 37 { 38 return *(int*)arg1 - *(int*)arg2; 39 } 40 41 void Test(char* testName, int* numbers, int length, bool expected) 42 { 43 if(testName != NULL) 44 printf("%s begins: \n", testName); 45 46 if(IsContinuous(numbers, length) == expected) 47 printf("Passed\n"); 48 else 49 printf("Failed\n"); 50 } 51 52 void Test1() 53 { 54 int numbers[] = {1,3,2,5,4}; 55 Test("Test1", numbers, sizeof(numbers) / sizeof(int), true); 56 } 57 58 void Test2() 59 { 60 int numbers[] = {1,3,2,6,4}; 61 Test("Test2", numbers, sizeof(numbers)/sizeof(int), false); 62 } 63 64 void Test3() 65 { 66 int numbers[] = {0,3,2,6,4}; 67 Test("Test3", numbers, sizeof(numbers)/ sizeof(int), true); 68 } 69 70 void Test4() 71 { 72 int numbers[] = {0,3,1,6,4}; 73 Test("Test4", numbers, sizeof(numbers) / sizeof(int), false); 74 } 75 76 void Test5() 77 { 78 int numbers[] = {1,3,0,5,0}; 79 Test("Test5", numbers, sizeof(numbers)/ sizeof(int), true); 80 } 81 82 int main() 83 { 84 int numbers[] = {1,3,2,5,4}; 85 int length = sizeof(numbers) / sizeof(int); 86 printf("the array number is:\n"); 87 for(int i = 0 ; i < length; i ++) 88 printf("%d\t", numbers[i]); 89 printf("\n"); 90 if(IsContinuous(numbers, length)) 91 printf("is Continuous.\n"); 92 else 93 printf("not Continuous.\n"); 94 95 printf("\n"); 96 int numbers1[] = {1,3,0,5,0}; 97 length = sizeof(numbers1) / sizeof(int); 98 printf("the array number is:\n"); 99 for(int i = 0 ; i < length; i ++)100 printf("%d\t", numbers1[i]);101 printf("\n");102 if(IsContinuous(numbers1, length))103 printf("is Continuous.\n");104 else105 printf("not Continuous.\n");106 107 printf("\n");108 int numbers2[] = {1,3,2,6,4};109 length = sizeof(numbers2) / sizeof(int);110 printf("the array number is:\n");111 for(int i = 0 ; i < length; i ++)112 printf("%d\t", numbers2[i]);113 printf("\n");114 if(IsContinuous(numbers2, length))115 printf("is Continuous.\n");116 else117 printf("not Continuous.\n");118 }