Números aleatorios en c

Hola! Que tal
Es la primera vez que visito este sitio y bueno tengo un pequeño problema con C.
Espero encontrar ayuda en un asunto que se me dificultó en un programa sobre AG's donde necesito generar un números aleatorios 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. Y espero ser clara. HAsta Pronto.

1 respuesta

Respuesta
1
Es bien simple tu problema. La primera cosa que se me ocurre es que hagas una función que intercambie los valores de 2 números.
void cambia(int *n, int num1,int num2)
{
int aux=n[num1];
n[num1]=n[num2];
n[num2]=aux;
}
Entonces ahora reemplazas las linea:
for(j=0;j<num_tareas;j++)
n=1+rand()%num_tareas;
por:
for(j=0;j<num_tareas;j++)
n=j;
for(j=0;j<num_tareas;j++)
cambia(&n,rand()%num_tareas,rand()%num_tareas);
Así primero llenai el vector con 1,2,3,4 y después cambiai al azar los valores...
Espero que te sirva mi respuesta. [email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas