Ver Mensaje Individual
  #8 (permalink)  
Antiguo 15/02/2013, 14:53
fightmx
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 9 meses
Puntos: 22
Respuesta: Ideas para realizar Diccionario

Hola, lo grave no me parece que quieras generar las combinaciones, sino que creo no has dimensionado la cantidad de bytes que necesitas para almacenar todo en un archivo de texto.

En total para esas 13 posiciones tienes:

16^13 = 4503599627370496 diferentes combinaciones.

Que si tratas de almacenarlas en un archivo de texto necesitas 13 bytes por cada una, es decir:

4503599627370496 * 13 = 58546795155816448 bytes.

Equivalentes a: 54525952 GB. Algo que luce poco amigable.

Te dejo un ejemplo utilizando sólo 3 posiciones, la idea es ir aumentando cada valor de derecha a izquierda similar a como lo hace un reloj digital. Entendiendo el procedimiento puedes hacerlo fácilmente para el número de posiciones que quieras, sólo toma en cuenta las cantidades de almacenamiento.

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5.  
  6.     const int TOTALDIG = 16;
  7.     const int TOTALPOS = 3;
  8.     char digits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  9.     int counter[TOTALPOS] = {0};
  10.     int total = 0;
  11.  
  12.     for(;;){
  13.         for(int i = 0; i < TOTALPOS; ++i)cout << digits[counter[i]];
  14.         cout << endl;
  15.  
  16.         counter[TOTALPOS-1]++;
  17.         if(counter[TOTALPOS-1] == TOTALDIG){
  18.             counter[TOTALPOS-1] = 0;
  19.             counter[TOTALPOS-2]++;
  20.         }
  21.         if(counter[TOTALPOS-2] == TOTALDIG){
  22.             counter[TOTALPOS-2] = 0;
  23.             counter[TOTALPOS-3]++;
  24.         }
  25.         total++;
  26.         if(counter[TOTALPOS-3] == TOTALDIG)break;
  27.     }
  28.     cout << "Total numbers: " << total << endl;
  29.     return 0;
  30. }

Saludos.