#include<stdio.h>
#include<stdlib.h>
bool IsContinuous1(int *arr,int N)
{/*整数数列,元素取值为0...65535中任意一个不重复的数,0可以出现多次
1、元素值可以乱序。
2、0可以匹配任何数值。
3、0可以多次出现。
4、全0算连续、只有一个非0也算连续。
*/
int min = -1,max = -1;
for(int i = 0;i < N; ++i)
{
if(arr[i] != 0)
{
if( min > arr[i] || -1 == min)
min = arr[i];
if( max < arr[i] || -1 == max)
max = arr[i];
}
}
if(max - min > N - 1)
return false;
else
return true;
}
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
bool IsContinuous2(int *arr,int N)
{//其他条件同上,但是允许有重复值
qsort(arr,N,sizeof(int),cmp);
int zeronum = 0; //0的数目
int i = 0;
int gap = 0; //数组arr中最大元素和最小元素只差
while( arr[i++] == 0)
zeronum++;
i--;
gap = arr[N - 1] - arr[i];
if(gap > N -1 && gap > zeronum)
return false;
else
return true;
}
int main()
{
int array[] = {1,3,2,5,7,0,8,2,3,5,7,7,7,7,7,5};
int len = sizeof(array) / sizeof(array[0]);
if(IsContinuous2(array,len))
printf("连续\n");
else
printf("不连续\n");
return 0;
}