2017-06-12 4 views
-4

Ich versuche, eine Funktion zu schreiben, die eine Liste von Ganzzahlen nimmt und alle arithmetischen Sequenzen darin findet.Arithmetische Schnitte in C

A = [-1, 1, 3, 3, 3, 2, 1, 0] Es gibt fünf arithmetische Sequenzen in dieser Liste: (0, 2), (2,4), (4, 6), (4,7), (5,7) - dies sind Indizes des ersten und letzten Elements einer Sequenz. Eine Sequenz ergibt sich aus dem Unterschied zwischen Elementen.

Wie Sie aus dem obigen Beispiel sehen - die Sequenz muss länger als 2 Elemente sein (sonst würde es eine Sequenz zwischen jeweils zwei Elementen finden).

Die Funktion, die ich schreiben muss muss die Anzahl der Sequenzen zurückkehren es auf der Liste findet - in diesem Fall sollten sie zurückkehren 5.

ich irgendwie bin stecken - versucht, ein paar verschiedene Ansätze, aber kläglich gescheitert . Die neueste Sache, die ich getan habe, ist:

#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

* „kläglich gescheitert“ * wird nicht definiert, was genau schief gelaufen ist. Verstand ist klarer? – CinCout

+1

Und wie ist es markiert "C" und "C++"? Sie sind zwei * verschiedene * Sprachen. – CinCout

Antwort

0

Hier ist ein einfacher Ansatz. Ich habe Kommentare platziert, um Ihnen das Verständnis zu erleichtern.

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

Danke für schnelle Hilfe @Thomas James. Wenn ich versucht habe, diesen Code auszuführen, bekomme ich unter dem Fehler einen Hinweis? Fehler: 'for' Schleife initiale Deklarationen sind nur im C99-Modus erlaubt für (int i = 0; i Raj

+0

Dies gibt nicht das richtige Ergebnis aus dem Testfall. –

+0

Danke. Ich habe noch einmal editiert. Ich dachte, wir bekommen nur die längste Sequenz, aber es scheint, wir sollten alle bekommen. Entschuldigung für das Versehen. –