/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

matrices random de 8x8 sin repetirse!! ayuda utrgente

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
lalo045



Registrado: 02 Jun 2014
Mensajes: 1

MensajePublicado: 02/06/2014 5:02 pm
Título: matrices random de 8x8 sin repetirse!! ayuda utrgente

hola, quisiera saber como hacer una mariz de 8x8 random pero sin que se repita ningun numero, aqui esta mi codigo:

srand(time(NULL));
for ( i=0;i<8;i++)
{
for ( j=0;j<8;j++)
{
tablero[i][j]=(rand()%64)+1;
printf("\t(%d)",tablero[i][j]);
}
printf("\n");
}
}
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 03/06/2014 9:00 am
Título: Re: matrices random de 8x8 sin repetirse!! ayuda utrgente

lalo045 escribió:
hola, quisiera saber como hacer una mariz de 8x8 random pero sin que se repita ningun numero.............
.....................


Relleno la matriz inicialmente del 1 al 64 y luego "la revuelvo":

Cita:

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
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64


33 57 8 49 16 28 27 18
4 30 6 37 5 48 23 20
29 25 10 1 35 44 19 47
3 14 43 38 58 52 12 50
51 17 2 40 42 41 13 15
53 54 62 56 21 60 34 7
31 24 9 61 22 63 32 45
55 46 64 26 59 39 36 11


Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
  int i,j,x_aleatorio,y_aleatorio,k=1,temp,tabero[8][8];
  srand((unsigned) time(NULL));
  for (i=0;i<8;i++){
    for (j=0;j<8;j++,k++){
      tabero[i][j]=k;
      printf("%3d",tabero[i][j]);
   }
  putchar ('\n');
  }
  putchar ('\n');
  for (i=0;i<8;i++)
    for (j=0;j<8;j++){
      x_aleatorio = rand() % 8 ;
      y_aleatorio = rand() % 8 ;
      temp=tabero[i][j];
      tabero[i][j]=tabero[x_aleatorio][y_aleatorio];
      tabero[x_aleatorio][y_aleatorio]=temp;
    }
  putchar ('\n');
  for (i=0;i<8;i++){
    for (j=0;j<8;j++){
      printf("%3d",tabero[i][j]);
   }
  putchar ('\n');
  }
  return 0;
}


¡¡¡¡ Saluditos! ..... !!!!
Volver arriba
dehm



Registrado: 29 Abr 2011
Mensajes: 143

MensajePublicado: 03/06/2014 9:40 am
Título:

Me quito el sombrero!

Me había puesto a resolverlo por el ineficiente método de ir comparando cada nuevo valor asignado, con los elementos anteriores. Eso significaba recorrer 0+1+2+......+64 veces el array.

Al final, la solución mejor suele ser la más simple. Claro que lo complicado es saber verla.

Felicidades Wink
_________________
Aprendiendo
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com