2014-03-02 1 views
-1

1에서 100 사이의 숫자를 생성하고 싶습니다.하지만 50이 될 때까지 그 번호를 다시 생성하고 50으로 한 다음 에코를 다시 생성합니다. 어떻게하면 좋을까요?x가 같지 않으면 임의의 숫자를 다시 생성하십시오.

내 기능 :

function create() { 
    $production_line = mt_rand(0, 3); 
    $random1 = mt_rand(0, 9); 
    $random2 = mt_rand(0, 9); 
    $random3 = mt_rand(0, 9); 
    $random4 = mt_rand(0, 9); 
    $random5 = mt_rand(0, 9); 
    $random6 = mt_rand(0, 9); 
    $production_year = mt_rand(3, 4); 
    $week1 = 4; 
    $week2 = 8; 
    $factory1 = 4; 
    $factory2 = 8; 

    if ($production_line + $random1 + $random2 + $random3 + $random4 + $random5 + $random6 + $production_year + $week1 + $week2 + $factory1 + $factory2 == 55) { 
     return $production_line.$random1.$random2.$random3.$random4.$random5.$random6.$production_year.$week1.$week2.$factory1.$factory2; 
    } 
} 
+2

는'while' 루프를 사용하여, 문제는 무엇인가? 그러나 요점은 무엇입니까? 그냥 50을 인쇄하십시오. – Barmar

+0

방금 ​​예제 번호를 사용했습니다. 실제로 생성 할 수있는 숫자가 너무 큽니다. – unlucky4ever

+0

임의의 누를 생성하는 용도는 모르겠군요. 그리고 수정 변수를 다시 검사하십시오 .. 성능 문제가 될 수 있고 시간 낭비했다. .. 당신은 진짜 필요성을 설명해 주실 래요? –

답변

3

while 루프 내에서 모든 난수를 생성하고 테스트하십시오. 코드의

function create() { 
    $week1 = 4; 
    $week2 = 8; 
    $factory1 = 4; 
    $factory2 = 8; 
    while (true) { 
     $production_line = mt_rand(0, 3); 
     $random1 = mt_rand(0, 9); 
     $random2 = mt_rand(0, 9); 
     $random3 = mt_rand(0, 9); 
     $random4 = mt_rand(0, 9); 
     $random5 = mt_rand(0, 9); 
     $random6 = mt_rand(0, 9); 
     $production_year = mt_rand(3, 4); 

     if ($production_line + $random1 + $random2 + $random3 + $random4 + $random5 + $random6 + $production_year + $week1 + $week2 + $factory1 + $factory2 == 55) { 
      return $production_line.$random1.$random2.$random3.$random4.$random5.$random6.$production_year.$week1.$week2.$factory1.$factory2; 
     } 
    } 
} 
+0

감사합니다. 속도를 높이는 방법이 있습니까? 그렇지 않다면 괜찮습니다. 프로덕션 용도로는 사용되지 않습니다. 학습 목적 만. – unlucky4ever

6

간단한 루프를 사용

$i = 0; 
while ($rand = mt_rand(0,100)) { 
    $i++; 
    if ($rand == 50) { 
     // found 50, so break out of the loop 
     break; 
    } 
} 

echo "It took $i iterations to find 50"; 

을하지만, 바로 조금 무의미? 50을 항상 출력한다면, 왜 난수를 생성해야합니까? 대신 50을 반향합니다. 또한 더 큰 제한값이 더 크면 느린 작동이 될 수 있습니다.

+0

또한, 카운터를 갖고 싶을 것입니다. 리모컨을 사용하는 동안 "무작위"50을 치기 전에 수천 번의 반복 작업을 수행 할 가능성이 있습니다. 서버에는별로 좋지 않습니다. – MueR

+1

@MueR : 답변을 업데이트했습니다. –

+1

유용하지만, 반복이 수천 회 반복되지 않으면 루프를 중단합니다. – MueR

2
$number = 0; 
$try = 0; 

while ($number != 50) { 
    $try++; 
    $number = rand(1,100); 
} 

echo "found $number after $try cycles"; 
3

내가 재 배열 한 비트가 더 응집력 수 있도록 :

function create() { 
    do { 
     $arr = [ 
      mt_rand(0, 3), // line 
      mt_rand(0, 9), 
      mt_rand(0, 9), 
      mt_rand(0, 9), 
      mt_rand(0, 9), 
      mt_rand(0, 9), 
      mt_rand(0, 9), 
      mt_rand(3, 4), // year 
      4, // weeks 
      8, 
      4, // factories 
      8, 
     ]; 
    } while (array_sum($arr) != 55); 

    return join('', $arr); 
} 
관련 문제