• Miércoles 16 de Octubre de 2019, 06:52

Autor Tema:  Encontrar la secuencia más larga en un vector  (Leído 1312 veces)

masterl1nk

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Encontrar la secuencia más larga en un vector
« en: Sábado 12 de Febrero de 2011, 19:20 »
0
Buenas tardes,

Estaba practicando unos ejercicios y me surgió un problema,

quiero reconocer la secuencia más larga de un mismo número en un vector, así, si yo tuviera este vector:


3 9 2 3 3 3 3 5 7 9 1 0 2 5 4 8 8 8 4

la secuencia más larga sería:


3 9 2 3 3 3 3 5 7 9 1 0 2 5 4 8 8 8 4

Cómo podría indentificarla?

Muchas gracias por su tiempo!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Encontrar la secuencia más larga en un vector
« Respuesta #1 en: Domingo 13 de Febrero de 2011, 15:09 »
0
Habría muchas formas de hacerlo. ¿No se te ocurre absolutamente ninguna idea?

LiLou

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Encontrar la secuencia más larga en un vector
« Respuesta #2 en: Jueves 17 de Febrero de 2011, 11:27 »
0
Aprovecho para preguntar yo tambien, pero en C, perdon si no sirve tambien para Pascal.

La funcion main seria tal que así:
Código: C
  1. int main(){
  2.  
  3.     int t1[M], t2[M];  //t1 = serie actual, t2 = serie mas larga
  4.     int n1=0, n2=0;    //longitud de las series
  5.     int x;             //lector
  6.  
  7.     printf("Intro. serie de enters acabada en 0:n");
  8.     scanf("%d", &x);     //inicializacion del primer entero
  9.     leer_e(t1, n1, x);   //inicializacion de la 1a serie
  10.    
  11.     while(!u_s_o_d(n1)){ //ultima serie ordenada decrec.  
  12.                         tratar_t(t1, n1, t2, n2);
  13.                         leer_e(t1, n1, x);
  14.                         }
  15.     resultado(t2, n2);    
  16.  
  17.     return 0;
  18. }
  19.  
Lo importante es decubrir como ha de ser la accion tratar_t.
Yo lo he hehco de esta forma, pero debe de haber algun error, pues no me sale bien:
Código: C
  1. void tratar_t(int t1[], int &n1, int t2[], int &n2){
  2.  
  3.          
  4.  
  5.      if(n1>n2) copiar(t1,t2,n1,n2);
  6.                    
  7.      //else no hacer nada, la serie mas larga es la ultima t2
  8.  
  9. }
  10. void copiar(int t1[], int t2[], int &n1, int &n2){
  11.        
  12.         int i, j=0;
  13.        
  14.         for(i=0; i<=n1; i++){
  15.                 t1[i]=t2[j];
  16.                 j++;
  17.         }
  18.         n2=j;
  19. }
  20.  
  21.  

El programa entero (ejecutadlo para ver qué resultados os da ):
Código: C
  1. #include <stdio.h>
  2. #define M 100
  3. void leer_e(int t[], int &n, int &e);
  4. bool u_s_o_d(int &n);
  5. void tratar_t(int t1[], int &n1, int t2[], int &n2);
  6. void resultado(int t[], int &n);
  7. void copiar(int t1[], int t2[], int &n1, int &n2);
  8.  
  9. int main(){
  10.  
  11.     int t1[M], t2[M];  //t1 = serie actual, t2 = serie mas larga
  12.     int n1=0, n2=0;    //longitud de las series
  13.     int x;             //lector
  14.  
  15.     printf("Intro. serie de enters acabada en 0:n");
  16.     scanf("%d", &x);     //inicializacion del primer entero
  17.     leer_e(t1, n1, x);   //inicializacion de la 1a serie
  18.    
  19.     while(!u_s_o_d(n1)){ //ultima serie ordenada decrec.  
  20.                         tratar_t(t1, n1, t2, n2);
  21.                         leer_e(t1, n1, x);
  22.                         }
  23.     resultado(t2, n2);    
  24.  
  25.     return 0;
  26. }
  27.  
  28. void leer_e(int t[], int &n, int &e){
  29.  
  30.      int i=0;
  31.      
  32.      while(t[i]<=e || e!=0){
  33.                     t[i]=e;
  34.                     scanf("%d", &e);
  35.                     i++;
  36.      }
  37.      n=i;             //longitud de t1
  38.      printf("%d", n); //para comprobar que valor tiene n
  39.      
  40. }
  41.  
  42. bool u_s_o_d(int &n){
  43.  
  44.      return(n==0);    
  45. }
  46.  
  47.  
  48. void tratar_t(int t1[], int &n1, int t2[], int &n2){
  49.  
  50.          
  51.  
  52.      if(n1>n2) copiar(t1,t2,n1,n2);
  53.                    
  54.      //else no hacer nada, la serie mas larga es la ultima t2
  55.  
  56. }
  57.  
  58. void resultado(int t[], int &n){
  59.  
  60.      int i;
  61.  
  62.      printf("nSerie mes larga: %dn", n);
  63.      for(i=0; i<=n; i++) printf("%d ", t[i]);
  64.      putchar('n');
  65. }  
  66.  
  67. void copiar(int t1[], int t2[], int &n1, int &n2){
  68.        
  69.         int i, j=0;
  70.        
  71.         for(i=0; i<=n1; i++){
  72.                 t1[i]=t2[j];
  73.                 j++;
  74.         }
  75.         n2=j;
  76. }
  77.