Tableau d 'entier séquence

[Résolu]
Signaler
Messages postés
40
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
9 mai 2007
-
Messages postés
233
Date d'inscription
jeudi 4 juillet 2002
Statut
Membre
Dernière intervention
5 juillet 2008
-
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

Messages postés
233
Date d'inscription
jeudi 4 juillet 2002
Statut
Membre
Dernière intervention
5 juillet 2008

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
Messages postés
40
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
9 mai 2007

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;
    }