En este apartado vamos a describir el algoritmo empezando por los datos de entrada.
Los datos de entrada del algoritmo serán dos:
- La cantidad de números a distribuir: Estará comprendido entre 2 y 1000. Los números a distribuir serán el 1, 2, 3, etc.
- Un número de referencia: Estará comprendido entre 1 y 4294967295. Será la base para conseguir la distribución, cumplirá el papel de semilla de un algoritmo de generación de números pseudoaleatorios. Este número podría ser aleatorio, por ejemplo si lo elegimos mendiante un sorteo oficial, como el de la ONCE u otro.
La idea central es la de calcular el resto de dividir el número de referencia por la cantidad de números que queden por distribuir. Con dicho resto obtendremos la posición del número que toca distribuir.
Inicialmenten tendremos un vector vacío de tantos elementos como números hay que distribuir. Empezaremos distribuyendo el número 1 colocándolo en un elemento vacío del vector, luego distribuiremos el 2 dentro de las posiciones vacías que queden en el vector, y así sucesivamente.
El resto de dividir el número de referencia por la cantidad de números que quedan por distribuir nos dará la posición libre donde hay que colocar el número que estamos distribuyendo, teniendo en cuenta que la primera posición libre del vector la vamos a identificar como la posición 0 y no la 1.
Vamos a aplicar este algoritmo para entenderlo mejor, por ejemplo, distribuiremos 7 números utilizando el número de referencia 57727 que salió ayer en el cupón de la ONCE.
Empezamos distribuyendo el 1 dentro de las 7 posiciones libres que hay:
vector inical # Distribuir # módulo # vector final
- - - - - - - # 1 # 57727 mod 7 = 5 # - - - - - 1 -
Pasamos a distribuir el 2, pero ahora entre las 6 posiciones libres que quedan:
vector inical # Distribuir # módulo # vector final
- - - - - 1 - # 2 # 57727 mod 6 = 1 # - 2 - - - 1 -
Nos tocaría ahora distribuir el 3 dentro de las 5 posiciones libres restantes:
vector inical # Distribuir # módulo # vector final
- 2 - - - 1 - # 3 # 57727 mod 5 = 2 # - 2 - 3 - 1 -
Continuaremos así hasta finalizar. El proceso completo es el siguiente:
vector inical # Distribuir # módulo # vector final
- - - - - - - # 1 # 57727 mod 7 = 5 # - - - - - 1 -
- - - - - 1 - # 2 # 57727 mod 6 = 1 # - 2 - - - 1 -
- 2 - - - 1 - # 3 # 57727 mod 5 = 2 # - 2 - 3 - 1 -
- 2 - 3 - 1 - # 4 # 57727 mod 4 = 3 # - 2 - 3 - 1 4
- 2 - 3 - 1 4 # 5 # 57727 mod 3 = 1 # - 2 5 3 - 1 4
- 2 5 3 - 1 4 # 6 # 57727 mod 2 = 1 # - 2 5 3 6 1 4
- 2 5 3 6 1 4 # 7 # 57727 mod 1 = 0 # 7 2 5 3 6 1 4