Tableau d 'entier séquence

Résolu
Strick9 Messages postés 40 Date d'inscription mardi 8 novembre 2005 Statut Membre Dernière intervention 9 mai 2007 - 25 mai 2006 à 12:19
24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008 - 25 mai 2006 à 13:48
Bonjour à tous
voila je suis débutant et j'aimerai bien connaître la solution de cet énoncé.

Soit un tableau d'entier. Une séquence paire est une suite d'entiers pairs. Une séquence impaire est une suite d'entiers impairs. Une séquence alternée est une suite d'entiers où il n y a pas deux entiers consécutifs ayant la même parité.
Ecrire une fonction permettant de déterminer la taille (nombre d'entier) de la séquence alterné la plus longue dans le tableau.

Exemple: la fonction doit rendre la valeur 6 pour un tableau contenant les valeurs suivantes:

                            2   2   3   5   4   8   4   1   6   9   4   1   3   6   4

Merci pour avoir pris le temps de lire et si vous connaissez la réponse, n'hésitez pas :) .
Bonne journée à toute et à tous.

2 réponses

24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
25 mai 2006 à 13:48
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
3
Strick9 Messages postés 40 Date d'inscription mardi 8 novembre 2005 Statut Membre Dernière intervention 9 mai 2007
25 mai 2006 à 13:02
j ai essayé de le résoudre mais j ai des erreur.
voila ma fonction:

 int sequence(int t[], int x)
    {
        int i = 0;
        int j = i + 1;        int cpt 0; int l 0;
       
        while (i < x)
        {
           
            if (t[i] % 2 != 0)
            {
                while (t[i] % 2 != 0 && t[j] % 2 == 0)
                {
                    i++; l++;
                    if (t[i]%2!=0&&t[j]%2!=0)
                    {
                        if (cpt<l) cpt=l;
                    l = 0;
                    }

                   
                }
            }
            else while (t[i] % 2 == 0 && t[j] % 2 != 0)
                {
                    i++; l++;
                    if (cpt < l) cpt = l;
                }
        } return cpt;
    }
0
Rejoignez-nous