J'essaye d'écrire une fonction qui prend une liste d'entiers et trouve toutes les séquences arithmétiques dedans. A = [-1, 1, 3, 3, 3, 2, 1, 0] Il y a cinq séquences arithmétiques dans cette liste: (0, 2), (2,4), (4, 6, 0, 6, 6, 6, 9).), (4,7), (5,7) - ce sont des indices du premier et du dernier élément d'une séquence. Une séquence est dérivée de la différence entre les éléments.Séquence de tranches arithmétiques dans C
Comme vous le voyez dans l'exemple ci-dessus - la séquence doit être plus longue que 2 éléments (sinon, elle trouverait une séquence entre deux éléments).
La fonction que je dois écrire doit retourner le nombre de séquences qu'il trouve sur la liste - dans ce cas, il doit retourner 5.
Je suis un peu coincé - essayé quelques approches différentes, mais a lamentablement échoué . La dernière chose que j'ai faite est:
#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;
}
* "Échoué lamentablement" * ne définit pas exactement ce qui s'est mal passé. L'esprit étant plus clair? – CinCout
Et comment est-il étiqueté à la fois 'C' et' C++ '? Ce sont deux langues * différentes *. – CinCout