Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Falla por poco

Estas en el tema de Falla por poco en el foro de C/C++ en Foros del Web. Hola, estoy haciendo un algoritmo en c que calcule todas las combinaciones de los elemtnos de un array: (1,2,3,4) 1, 2, 3, 4, 12, 13, ...
  #1 (permalink)  
Antiguo 24/01/2012, 02:03
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Falla por poco

Hola, estoy haciendo un algoritmo en c que calcule todas las combinaciones de los elemtnos de un array:

(1,2,3,4)

1,
2,
3,
4,

12,
13,
14,
23,
24,
34,

123,
124,
134,
234,

1234

Este es el código:
Código:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

int contador = 0;

int main()
{
  int i;
  int j;
  int r;
  int zonas = 4;
  
  /* Array con el indice de cada packet */
  int array[32] = {1,2,3,4,5,6,7,8,9,10,
                   11,12,13,14,15,16,17,18,19,20,
                   21,22,23,24,25,26,27,28,29,30,
                   31,32};
  
  int grupo = 0; 
  while (grupo < zonas)
  {
        //printf("Combinaciones de %d elementos\n", grupo+1);
        int posicion;
        for (posicion = 0; posicion < zonas; posicion++)
        {     
              if ((posicion + (grupo + 1)) <= zonas)
              {
                   int ultimo = 0;
                   int hueco = 0;
                   
                   while (ultimo < (zonas - 1)) /* Hasta que no terminemos con esa posicion */
                   {   
                        int elementos_contados = 0;
                        int pivote = posicion;

                        printf("%d ", array[pivote]);
                        
                        bool hueco_pasado = false;
                        while (elementos_contados < grupo) /* Hasta que no terminemos con esa combinacion */
                        {
                              pivote++;
                              if (hueco == 0)
                              {
                                      printf("%d ", array[pivote]);
                                      elementos_contados++;  
                              }
                              else
                              {       
                                      if (hueco_pasado == false)
                                      {
                                          pivote = pivote + hueco;
                                          hueco_pasado = true;
                                      }
                                               
                                      elementos_contados++;
                                      printf("%d ", array[pivote]);
                              }  
                        }
                        contador++;
                        printf("\n");
                        hueco++;
                        ultimo = pivote;
                        if (grupo == 0){ultimo = 100;}
                   }
              }
        }
        grupo++;
  } 

  
  printf("Numero de combinaciones %d\n", contador);
  scanf("%d\n", i);
  return 0;
}

Pero el resultado es
1,
2,
3,
4,

12,
13,
14,
23,
24,
34,

123,
124,
134,
234,

1234

Se salta esa combiación, podéis ayudarme?, no soy capaz de afinarlo
  #2 (permalink)  
Antiguo 03/02/2012, 01:39
Avatar de Jorge__  
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Falla por poco

Hola, espero te sirva este codigo de un compañero, nu_kru del sitio elotrolado.net
Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int N = 5;
  6. int K = 3;
  7.  
  8. void frecursiva(int numero, int indice, int longitud){
  9.     int i;
  10.     if(longitud == K) {
  11.         cout << numero << endl;
  12.     }
  13.     else{
  14.         for (i = indice; i <= N; i++){
  15.             frecursiva(numero * 10 + i, i + 1, longitud + 1);
  16.         }
  17.     }
  18. }
  19. int main(){
  20.     int i;
  21.     for(i = 1; i < N; i++){
  22.         frecursiva(i, i + 1, 1);
  23.     }
  24. }

Etiquetas: falla, poco, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:01.