Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/08/2008, 04:29
pekpon
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 5 meses
Puntos: 2
Crear un numero aleatorio sin repetir los que ya han salido

Buenas a todos,

Estoy haciendo un programa en el que necesito que el rand(); me arroje un numero aleatorio de 1 a uno cualquiera, sin que cuando lo vuelva a usar me arroje un numero que ya me ha dado anteriormente.

Es decir si en un bucle primero me d un 3, luego al repetir el bucle ya no me puede mandar nunca mas un 3.

Lo mas corto que se me ha ocurrido es hacer un rand(); y luego pasarlo por un filtro con un if, en el que compruebo si ese numero ya esta en una cadena, si esta se repite y si no, pasa adelante y en la cadena se añade tal numero.

Asi es como lo hago:

Código PHP:
 for($i=1$i<=$as$i++) 
     {
      
$ale mt_rand(1,$mat);
      if( 
$ale == $mat )
      {
      
$mat $mat 1;
      }
      
$bus substr_count($ale_cad$ale);
      
          while ( 
$bus != || $h[$ale] == 0)
              {
              
$ale_cad $ale_cad.$ale;
              
$ale mt_rand(1,$mat);
              
              if( 
$ale == $mat )
                 {
                  
$mat $mat 1;
                  }
                 
               
$bus substr_count($ale_cad$ale);
              }
        
$mat $amat;
        
$ale_cad $ale_cad.$ale;
        
$h[$ale] = $h[$ale] - 1
Código:
Variables:

$mat - numero de materias totales que introducimos
$h[$] - id de la materia
$ale_cad - cadena que se va creando
$ale - aleatorio del 1 al $mat
$as - horas que tiene este dia

No se si es la correcta pero el caso es que con poca informacion, el programa me lo tira bien pero a la que lo cargo, se tira muchisimo rato procesando y se cuelga.

Espero que podais ayudarme,

Muchas gracias!