Generar un número aleatorio con determinadas restricciones

Hola! Que tal
Es la primera vez que visito este sitio y bueno tengo un pequeño problema con C.
Espero que me ayude para mi programa de la escuela... Necesito generar un numero aleatorio con ciertas restricciones.
Primero se tiene una variable Num_tareas ingresado por el usuario que restringe el tamaño real de los arreglos: n[MAX] y población[MAX][MAX]
Quiero generar aleatorios para asignarlos a n[], pero que no se repitan y que sean en un rango de 1 a num_tareas.
Esos valores serán asignados a población[][], de tal forma que se imprima en pantalla, por ejemplo: si se ingresa:
num_tareas=5
//se imprimirá en pantalla lo siguiente:
Cromosoma 1
[1][2][3][4][5]
Cromosoma 2
[1][2][3][5][4]
Cromosoma 3
[1][2][4][3][5]
Cromosoma 4
[1][2][4][5][3]
Cromosoma 5
[2][1][3][4][5]
Cromosoma 6
[2][3][1][4][5]
Cromosoma 7
[3][1][2][4][5]
Cromosoma 8
[3][2][1][5][4]
Cromosoma 9
[4][2][3][1][5]
Cromosoma 10
[1][2][3][4][5]
// Como vé ningún numero se repite y se hace esto 10 veces nada más
Pondré parte del código que ya tengo.
#include<stdio.h>
#define MAX 100
#define ELEM 10
void main(){
int n[MAX],poblacion[MAX][MAX], num_tareas;
scanf("%d",&num_tareas);
srand(time(NULL));
printf("POBLACION\n");
for(i=0;i<ELEM;i++){
for(j=0;j<num_tareas;j++){
n=1+rand()%num_tareas;
printf("Cromosoma %d:t",i+1);
printf("[%d]",poblacion[j]=n[j]);
}
}
getch();
}
Este código me genera aleatorios diferentes pero por desgracia se me repiten los números y no me sirve.
Agradecería su pronta respuesta.

1 Respuesta

Respuesta
1
Realmente el problema creo que sería de matemática combinatoria más que de programación, pero bueno, veamos que se puede hacer.
- Primero crea una lista dinámica.
- Después ve creando números aleatorios y comparando cada uno que vas creando con todos los anteriores, si está repetido pasas de él, en caso contrario añádelo a la lista dinámica. Continua así hasta que tengas tantos números como quieras.
- Después el problema se convierte en un problema de combinatoria puro y duro. Habrás de combinar estos números que tienes, que ya son todos distintos, si que se repita tampoco ninguna combinación.
. Por ejemplo, si son cinco números, fija los cuatro primeros y combínalo con el quinto. Después fija los tres primeros y cambia la posición del cuarto y el quinto...
Ok!
Parece ser que tengo que investigar más acerca de las listas dinámicas que me menciona, espero que no sean tan difíciles de captar. Agradezco mucho su ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas