Exercice trés difficile sur les tableaux

Fermé
kafouri Messages postés 10 Statut Membre -  
 CHIHAB Yassine -
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

  1. Y.FEDERAL
     
    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!
    7
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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+
    0
  3. kafouri Messages postés 10 Statut Membre
     
    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 ?
    0
    1. yassine morsaoui
       
      #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;
      }
      0
    2. CHIHAB Yassine
       
      #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();
      }
      0