2011-04-06 3 views

답변

15

int r = (arc4random() % 8) + 1

+1

+1 간단하고 간단합니다. –

+1

범위 내의 다른 숫자를 제외하려는 경우이 대답은 실제로 효과가 없습니다. Sheehan Alams의 제목은 "arc4random을 1에서 시작하고 싶습니다."또는 "arc4random을 사용할 때 첫 번째 숫자를 제외하고 싶습니다."와 같이 좀 더 구체적이어야합니다. 그냥 말하기 :) – Tommie

1

int r = arc4random() % 8 + 1;

이 작업에 %을 사용하지 않으려는 다른 답변 (예 : one from me)을 참조하고 대신 사용해야하는 내용은 무엇입니까?

1

원하는 범위의 수를 얻을 때까지 당신은 단순히 당신이 원하지 않는 번호를 밖으로 던지기, 반복적으로 시도 할 수 있습니다. 이것은 수학에서 "acceptance-rejection method"라는 멋진 이름을 가지고 있습니다. 간단하고 작동합니다.

이론적으로 시간이 오래 걸린다는 우려가 들기 때문에. 그러나이 방법은 통계 응용 프로그램에서 항상 사용됩니다. while 루프를 통과 할 확률은 N이 증가함에 따라 빠르게 감소하기 때문에 루프를 통과하는 평균 횟수는 적습니다.

당신은 lohi (포함) 사이의 숫자를 생성하기 위해, 일반적으로

arc4random_uniform(9) + 1 

로, arc4random_uniform()을 사용할 수 있습니다

5

, 당신은 사용

arc4random_uniform(hi - lo + 1) + lo 

것은 사용하지 않으려면 arc4random_uniform()이고 방정식을 사용하여 얻은 결과 값이 균등하게 분배되지 않는다는 것을 지적하면서 arc4random()을 계속 사용하려면

을 사용하십시오.
(arc4random() % (hi - lo + 1)) + lo 
관련 문제