2011-10-15 3 views
-1

주어진 수의 난수를 골라야하지만 균등하게 간격을두고 중복이없는 PHP 함수를 만드는 가장 효과적인 방법은 무엇입니까? 예를 들어PHP : 균등 한 간격으로 임의의 숫자를 선택하십시오.

결과는 [0, 2, 5] 일 수는 0-6 사이의 3 난수를 원한다고 또는 [1, 3,6].

시작하는 방법에 대한 아이디어가 있으십니까?

+3

"1,3과 6은 어떻게 균등하게 간격을두고 있습니까?"3과 6 사이의 간격은 1과 3 사이의 간격보다 50 % 더 큽니다. "1 3 5"가 아닌 이유는 무엇입니까? –

+1

0, 2, 그리고 5 번. –

+0

가능성에 대한 규칙 집합이 있다면 그것을 계산하고 무작위로 선택하십시오. –

답변

2

참고. 당신이 에게 임의의 숫자를 선택합니다


, mt_rand(min, max)를 사용합니다.

N으로 나눌 수있는 임의의 숫자를 선택하려면 mt_rand(min, max)*N을 사용하십시오. 나는 당신의 질문에서 이해하는 것입니다

for($i = 0; $i <= M-1; $i++) { 
    $result[$i] = mt_rand(min, max)*N; 
} 
print_r($result); 

:

당신이 N의 모든 나눌 M 임의의 숫자를 선택합니다

은, 루프를 사용합니다.

+0

나는 _M 난수를 N_로 나눌 수있는 질문에서 취합니다. 나는 다음과 같이 덧붙이고 싶습니다. "무작위"는 생성 된 두 숫자가 균등하게 간격을 두지 않는다는 ** 보장 **이 없음을 의미합니다 .mt_rand (0,6)는 [0,1,5] 또는 [2,5,6] ] 그대로 [0,2,5] 또는 [1,3,6]을 생성합니다. – Herbert

+0

수학적으로 ** 불가능 ** ** 무작위 ** 숫자는 *** 균등 *** 간격입니다. 정의에 의해 불가능합니다. –

+1

그게 내가하려는 일이지만, 당신이 더 잘 말 했어요 :-) – Herbert

0

"all evens"와 같이 균등하게 간격을 두었다면 2의 모듈러스와 비교하여 숫자를 확인할 수 있습니다. if ($ n % 2 == 0) {// 짝수 숫자가있는 것 ...}

array_rand (array (1,2,3,4,5,6 ...), 3); 숫자 풀에서 3 개의 임의의 숫자를 얻을 수는 있지만 물론 무작위적일 것입니다 ... 균등하게 간격을 두지 않았습니다 ... 그룹에서 균등하게 간격을 둔 숫자는 정의 상으로는 거의 무작위 적이 지 않습니다.

제 생각에는 배열의 인덱스를 무작위로 선택한 다음 해당 인덱스의 요소를 일정 간격으로 추가하는 것입니다. 그러나 필요한 많은 반복을 통해 수행하십시오. 코드 중에 아래의 복사 붙여 넣기로 직접 작동하지 않습니다 것을

$random_numbers = array(1,2,3,4,5,6,7,8,9); 
$random_val = array_rand($random_numbers, 1); 
$iterations = 3; 
for ($i=0; $i<$iterations; $i++){ 
    $random_val = $random_val+2; 
    print $random_val; 
} 
관련 문제