Réponse acceptée !
voilà un p'tit truc que j'ai fait rapido, ça te renvoie en plus l'index du premier element de la sequence la plus longue. test bien j'ai pas regardé enormement.
#include <stdio.h>
unsigned int sequence(unsigned int t[], unsigned int uNb,unsigned int *FirstElem) { // vars unsigned int uI = 0; unsigned int uMax; unsigned int uCpt; unsigned char ucPrevious; unsigned int uStart;
// cas ou tableau vide if (uNb == 0) { return 0; }
// init max nomber uCpt = 0; uMax = 0; uStart = 0; *FirstElem = 0;
if (t[0]%2 == 0) { ucPrevious = 0; // pair } else { ucPrevious = 1; // impair }
while (uI < uNb) { // element courant est pair if (t[uI]%2 == 0) { if (ucPrevious == 0) // le précédent est pair { if (uCpt > uMax) { uMax = uCpt; *FirstElem = uStart; } uStart = uI; uCpt = 1; // 1 parce qu'on garde element courant } else // le précédent est impair { uCpt++; ucPrevious = 0; } } else // element courant impair { if (ucPrevious == 0) // le précédent est pair { uCpt++; ucPrevious = 1; } else // le précédent est impair { if (uCpt > uMax) { uMax = uCpt; *FirstElem = uStart; } uStart = uI; uCpt = 1; // 1 parce qu'on garde element courant } } uI++; }
if (uCpt > uMax) { uMax = uCpt; *FirstElem = uStart; }
return uMax; }
int main (void) { unsigned int uNbElem = 15; unsigned int tab[]={2,2,3,5,4,8,4,1,6,9,4,1,3,6,4}; unsigned int uMaxLen; unsigned int uFirstElem; unsigned int uI;
uMaxLen = sequence(tab,uNbElem,&uFirstElem); fprintf (stderr,"MAX : %u\n",uMaxLen); for (uI=0;uI<uMaxLen;uI++) { fprintf (stderr,"%u - ",tab[uFirstElem+uI]); } return 0; }
++ 24K
|