2

5つの要素(1024、1025、1026、1027、1028)を持つ配列があります。これらの要素が連続しているかどうかを確認するにはどうすればよいですか。配列に偶数の要素がある場合も、同じことができます。

4

4 に答える 4

2

配列をループして、前のメンバー(存在する場合)が現在のマイナスに等しいことを確認し1ます。

for (int i = 1; i < 5; i++) {
     if (arr[i - 1] != arr[i] - 1) {
          // It's not sequential.
          break;
     }
}
于 2013-02-05T06:30:57.693 に答える
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");
于 2013-02-05T06:32:07.893 に答える
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;
}

一般に、シーケンシャル配列はascendingORdescending順である可能性があり、これを考慮する必要があるためです。また、コーナーケースもあります-長さ0/1/2の配列は常に連続しています(長さ0についてはわかりません)。

編集:最初の配列要素が同じ値である場合の状況のコードを修正しました。これで問題なく動作するはずです。

于 2013-02-05T07:30:39.133 に答える
0

隣接する 2 つの数字を比較する必要があり、同じことを何度も行う必要があります。したがって、ループが必要です。簡単なプログラムは次のとおりです。

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

私の答えがお役に立てば幸いです。ありがとうございました。

于 2013-02-05T06:51:14.530 に答える