Exercice trés difficile sur les tableaux

Fermé
Bonjour à tous

voici un exercice d'algorithmique qui traite les tableaux:

Soit T un tableau d'entiers de taille N. Une série dans T est une suite d'éléments consécutifs et égaux de T. le problème consiste à trouver la plus longue série dans T, l'indice de son premier élément et sa longueur

Par exemple

T: 2 2 6 6 6 6 9 9 9 9 9 1 0 0 0

le programme affichera la série est 9 elle commence à l'indice 7 et elle est de longueur 5

Merci énormément
Configuration: Windows XP
Firefox 3.0.4

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. VOICI MA RÉPONSE AU LANGUAGE C: si vous avez une qst n'hésiter pas :)
    #include <stdio.h>
    #include <stdlib.h>
    //another example: 11 444 2 7777 3 666
    void longsequence(int T[],int n)
    {
    int indice=0,longueur=0,longueurTMP=1,i=0;//dans l exercice ils considère que l'indice(0)=1 ici indice0 = 0
    for(i=0;i<n;i++)
    {
    if (T[i]==T[i+1]) /*=>*/ longueurTMP=longueurTMP+1;
    else
    {
    if (longueur<longueurTMP)
    {
    longueur = longueurTMP;
    indice=i-longueur+1;//i-(longueur-1) car longueur(0) = 1
    }

    longueurTMP=1;
    }
    }
    printf("longeur = %d; indice = %d ",longueur,indice);
    }
    int main()
    {
    int T[15]={0},i=0,n=0; //15= max array size
    /* array = ? */
    printf("Please enter the array's size(max=15)");
    scanf("%d",&n);
    printf("Please set the array's value: \n");
    for(i=0;i<n;i++)
    {
    printf("T[%d]= ",i);
    scanf("%d",&T[i]);
    }
    longsequence(T,n);
    return 0;
    system("PAUSE");
    }
    //FEDERAL WAS HERE
    //FROM MOROCCO
    // ENJOY!
    1. Contributeur
      Bonjour,
      1°) Tu dit pas quel language pour "TON programme"
      2°) Esssaye d'abord de résoudre le problème et ENSUITE, nous pourront peut-être t'aider à le mettre au point.
      3°) CCM n'est pas un forum pour FAIRE les devoirs des étudiants.
      A+
      1. Bonjour

        voici ma proposition (écrite en langage Pascal)

        uses wincrt;
        type
        tab=array[1..100] of integer;
        var
        m,v,t:tab;
        j,i, p, nbmax,posi,nb,n:integer;

        begin
        write('siaisr N= ');
        readln(n);
        for i:=1 to n do
        begin
        write('T[',i,']=');
        readln(t[i]);
        end;

        i:=1;
        nb:=1;
        repeat

        nb:=nb+1;
        i:=i+1;

        until (t[i]<>t[i+1]);

        j:=i+1;
        nbmax:=1;
        posi:=1;
        repeat

        if t[j]=t[j+1] then

        begin

        nbmax:=nbmax+1;
        j:=j+1;

        end;

        p:=j;

        until (t[j]<>t[j+1]) or (j>=n-1);

        if nb>nbmax then
        begin
        nbmax:=nb;
        p:=i;
        posi:=1;
        end
        else
        posi:=i+1;

        writeln('la serie est: ',t[p], ' l''indice ',posi, ' la longueur est: ',nbmax);

        end.

        ce programme tourne correctement, mais il affiche dans tous les cas la série d'indice 2

        Pouvez vous m'aider ?
        1. #include <stdio.h>
          #include <stdlib.h>

          int main()
          {
          int t[100],i,n,m,s[100],in[100],l[100],j;
          printf("donner la dimension \n");
          scanf("%d",&n);
          for(i=0;i<n;i++)
          {
          printf("\n t[%d]= ",i+1);
          scanf("%d",&t[i]);
          }
          for(i=0;i<n;i++)
          {
          printf("t[%d]= %d\t",i+1,t[i]);

          }
          s[0]=t[0];l[0]=0;in[0]=0;j=0;
          for(i=0;i<n;i++)
          {
          if(t[i]==s[j]) l[j]=l[j]+1;
          else {j++;in[j]=i;s[j]=t[i];l[j]=1;}

          }
          m=l[0];
          for(i=0;i<3;i++)
          {
          if(l[i]>=m) {m=l[i]; n=i;}

          }
          printf("\nla série est %d elle commence a l'indice %d et elle est de longueur %d",s[n],in[n]+1,l[n]);
          return 0;
          }
        2. #include<stdio.h>
          #include<conio.h>
          #include<stdlib.h>
          main(){
          int n,i,k=0,l=0,p,c,d=0,r=0,b=1;
          printf("donnez la taille du tableau \n ");
          scanf("%d",&n);
          int *t;
          t=(int*)malloc(n*sizeof(int));
          for(i=0;i<n;i++){
          printf("donnez elem t[%d] \n ",i);
          scanf("%d",&t[i]);
          }
          p=t[0];
          for(i=1;i<n;i++){
          if(d!=2){
          if(t[i]==p){
          if(d==0){
          k++;}
          if(d==1){
          r++;}
          if(i==n-1){
          goto a;}
          continue;}
          if(t[i]!=p){
          if(i==n-1){
          goto a;}
          c=i;
          p=t[i];
          d++;
          b++;
          }

          }else{
          a : if(k<r){
          l=c;
          k=r;
          d=1;
          r=0;}
          }
          }
          if(b>3){
          printf("le plus grand serie est de %d son premier est indice est %d et son longeur est %d",t[l-k-1],l-k-1,k+1);}
          else{
          printf("le plus grand serie est de %d son premier est indice est %d et son longeur est %d",t[l],l,k+1);}
          getch();
          }