2017-06-12 17 views
-4

整数のリストを取り、その中のすべての算術列を見つける関数を作成しようとしています。Cの算術スライスシーケンス

A = [-1,1,3,3,3,2,1,0] このリストには、(0,2)、(2,4)、(4,6 )、(4,7)、(5,7) - これらはシーケンスの最初と最後の要素のインデックスです。シーケンスは、要素の違いによって導出されます。

上記の例からわかるように、シーケンスは2つ以上の要素でなければなりません(そうでない場合は、2つの要素の間にシーケンスがあります)。

私が書く必要がある機能は、それがリストに見つかった配列の数を返さなければなりません - このケースでは、私は一種のこだわっている5.

を返す必要があります - は、いくつかの異なるアプローチを試みたが、無残に失敗しました。 。私がやった最新のものは次のとおりです:

#include<stdio.h> 

int main() { 
    // your code goes here 
    long int A[]={-1, 1, 3, 3, 3, 2, 1, 0}; 
    //int N= sizeof(A)/sizeof(A[0]); 
    int N=8; 
    printf("%d", solution(A,N)); 
    return 0; 
} 


int solution (long int A[], int N) 
{ 
    int numSlices=0; 

    int tot; 
    // Get the Consecutive Array 
    for(int iOut=0; iOut<N; iOut++) 
     { 
     int startIndex = iOut; 
     int endIndex; 
     long int diff; 
     for(int iIn=iOut; iIn<N-2; iIn++) 
      { 
      if((A[iIn]-A[iIn+1]) == (A[iIn+1]-A[iIn+2])) 
      continue; 
      else 
       { 
       endIndex = iIn+1; 
       iOut=endIndex+1; 
       printf ("SI = %d \t EI = %d \n", startIndex, endIndex); 
       break; 
       } 
      } 

     int ln=endIndex - startIndex; 
     if (ln >=3) 
     numSlices +=(ln-2)* (ln-1); 
     // 1* 
    } 
return numSlices; 
} 
+3

「正確に何が間違っていたのか」は定義しません。心はもっと明らかですか? – CinCout

+1

そしてそれは 'C'と' C++ 'の両方にどのようにタグ付けされていますか?彼らは2つの異なる*言語です。 – CinCout

答えて

0

これは簡単な方法です。私はあなたの理解を助けるコメントを掲載しました。

int solution (long int A[], int N) 
{ 
    int i; 
    int count = 0; 
    for (i = 0; i < N - 1; i++) { 
     int diff = A[i + 1] - A[i]; // get the difference of the current number to the next 
     int temp = i + 1; 
     // continue expanding the sequence as long as the difference is still the same 
     while (temp < N - 1 && A[temp + 1] - A[temp] == diff) { 
      count++; 
      printf("Sequence found: %d, %d\n", i, temp); // display the sequence 
      temp++; 
     } 
    } 
    return count; 
} 
+0

クイックヘルプ@トーマスジェームズありがとう。私はこのコードを実行しようとしたとき、私は何かの手掛かりを得ています。エラー: 'for'ループ初期宣言はC99モードでのみ許可されます。 for(int i = 0; i Raj

+0

これはテストケースから正しい結果を得ません。 –

+0

ありがとうございます。私はもう一度編集しました。私は最長のシーケンスしか得られていないと思っていたが、すべてを得るべきだったようだ。見落として申し訳ありません。 –