思路:把數組排序,統計數組中0的個數,統計排序之後的數組相鄰數字之間的空缺總數。如果空缺的總數小於或者等於0的個數,那麼這個數組就是連續的;反之則不連續。最後,我們還需要注意的是,如果數組中的非0數字重復出現,則該數組不是連續的。換成撲克牌的描述方式,就是如果一副牌裡含有對子,則不可能是順子。
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 else
105 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 else
117 printf("not Continuous.\n");
118 }
