我有一个包含5个元素的数组(1024,1025,1026,1027,1028)。如何检查这些元素是否顺序。如果数组中包含偶数个元素,我也可以这样做。
答案 0 :(得分:2)
遍历数组并确保前一个成员(如果存在)等于当前减去1
。
for (int i = 1; i < 5; i++) {
if (arr[i - 1] != arr[i] - 1) {
// It's not sequential.
break;
}
}
答案 1 :(得分:0)
简单地遍历数组:
bool is_sequence(int *arr, int size)
{
int i;
for(i = 0; i < (size - 1); i++)
{
if((arr[i] + 1) != arr[i])
/* array is not sequential */
return false;
}
/* array is sequential */
return true;
}
<...>
if(is_sequence(my_array, 5))
printf("sequential!"
else
printf("not sequential");
答案 2 :(得分:0)
你应该比较两个相邻的数字,你必须多次做同样的事情。所以,循环是必要的。一个简单的程序如下。
#include<stdio.h>
int main()
{
int a[5]={1024,1025,1026,1027,1028};
int i,s;
for(i=0;i<4;i=i+1)
{
if(a[i]+1 != a[i+1])
{ s=-1; break; }
else
{ s=0; }
}
if(s=0)
{ printf("sequential."); }
else
{ printf("not sequential."); }
}
我希望我的回答可以帮到你。谢谢。
答案 3 :(得分:0)
我会建议这个解决方案(如果只说sequential
你的意思是ordered
):
#include <stdio.h>
int isArraySequential(int * array, int size) {
int isAscendingFirst;
int isAscendingCurrent;
int isChangeFound = 0;
int i;
// arrays of length 0/1/2 are assumed to be sequential
if (size < 3)
return 1;
for (i=1; i < size; i++) {
// in case there is a change
if (array[i] != array[i-1]) {
isAscendingCurrent = (array[i] > array[i-1]);
// on first change
if (!isChangeFound) {
isChangeFound = 1;
isAscendingFirst = isAscendingCurrent;
}
// on subsequent changes
else {
if (isAscendingFirst != isAscendingCurrent)
return 0;
}
}
}
return 1;
}
int main(){
int array1[4] = {1, 1, 0, -1};
int array2[4] = {2, 2, 2, 2};
int array3[4] = {1, 2, 4, 3};
printf("Is array1 sequential ? %d\n", isArraySequential(array1, 4));
printf("Is array2 sequential ? %d\n", isArraySequential(array2, 4));
printf("Is array3 sequential ? %d\n", isArraySequential(array3, 4));
return 0;
}
因为通常顺序数组可以是ascending
OR descending
顺序,这必须考虑在内。还有一些极端情况 - 长度为0/1/2的数组总是顺序的(我不确定长度为0)。
编辑:当第一个数组元素具有相同的值时,我修复了代码。现在它应该工作正常。