2013-02-05 121 views
2

我有一個包含5個元素(1024,1025,1026,1027,1028)的數組。我如何檢查這些元素是否連續或不連續。我可以做同樣的事情如果數組有偶數個元素。在數組中查找數字是否按順序排列

+1

遍歷數組? –

+0

每次增加數組指針1並檢查其結果... – akp

+1

您應該定義_'sequential'_,因爲......,8,4,2,1'序列也是連續的...或者通過說'順序'你的意思只是'有序'?在那種情況下,我發佈了一個aswer,如果你想找到列表是按照升序/降序排列的。 –

回答

2

循環遍歷數組並確保前一個成員(如果存在)等於當前減號1

for (int i = 1; i < 5; i++) { 
    if (arr[i - 1] != arr[i] - 1) { 
      // It's not sequential. 
      break; 
    } 
} 
+0

爲什麼不從'i = 1'開始並且失去'i> 0'檢查? – Johnsyweb

+1

@Johnsyweb這將是一個不錯的想法:) – alex

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"); 
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."); } 
} 

我希望我的回答能幫助你。謝謝。

+0

非常感謝英利燕。這是我正在尋找的答案 – Avinash

+0

這是我的榮幸。 –

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)。

編輯:我修復了第一個數組元素具有相同值的情況下的代碼。現在它應該可以正常工作。