您的位置:首页 > 职场人生

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

2013-03-16 13:52 169 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  笔试面试
相关文章推荐