Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/01/2012, 02:03
Zunri
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 14 años, 3 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