判断数组中的数值是否连续

来源:互联网 发布:金蝶erp软件 编辑:程序博客网 时间:2024/06/07 19:15
#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;elsereturn 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;elsereturn 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");elseprintf("不连续\n");return 0;}

原创粉丝点击