Exercice trés difficile sur les tableaux

Fermé
kafouri Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 14 janvier 2009 - 6 déc. 2008 à 12:41
 CHIHAB Yassine - 11 nov. 2013 à 12:00
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

3 réponses

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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
6 déc. 2008 à 12:57
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
kafouri Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 14 janvier 2009
6 déc. 2008 à 13:02
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
Utilisateur anonyme
11 juil. 2013 à 06:10
#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
CHIHAB Yassine
11 nov. 2013 à 12:00
#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