Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Lody en 17 Octubre 2017, 23:50 pm



Título: Generar aleatorios
Publicado por: Lody en 17 Octubre 2017, 23:50 pm
Hola, necesito comparar tres números que no se repitan entre sí, y que se generen de forman aleatoria, es decir que no impriman 111, 221, etc,
Quiero hacerlo con arreglos para compararlos pero no he encontrado la forma correcta para terminarlo.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5.  
  6. int main(){
  7. srand(time(NULL));
  8. int arr[4];
  9. int num;
  10.  
  11. for(int i=0; i<4; i++){
  12.  
  13. do{
  14. arr[i]=1+rand()%9;
  15. }while(arr[0]==arr[1] || arr[0]==arr[2] || arr[0]==arr[3]);
  16. //Falta comparar todos los arr[i]
  17.  
  18. printf("%d", arr[i]);
  19.  
  20. }
  21. }
  22.  


Título: Re: Generar aleatorios
Publicado por: srWhiteSkull en 18 Octubre 2017, 15:43 pm
Sencillo, has que esos tres valores que se generan al random pasen dentro de dos while que a su vez estén dentro de un while principal (tal como tienes). Cada bucle while anidado se encargará de los siguientes "dígitos", el segundo y el tercero, y ambos se repetirán mientras el valor del anterior dígito no sea igual al generado en ese bucle anidado.

El primer dígito no requiere condición o bucle, simplemente lo generas, será la referencia para los dos siguientes. El segundo se genera dentro de un while y comprueba que no es igual al primero, de ser así sale del while y pasa al siguiente while (y último) donde comrueba que el segundo digito sea diferente al generado dentro de este. De ser así sale del while y continua el proceso en el while principal o for.

Para unir los tres digitos solo tienes que aplicar una sencilla fórmula :

n = pd *100 + sd*10 + td