2011-12-26 9 views
-3

나는 그들을 반복 없음으로 무작위로 번호를 1-200을 인쇄하는 코드를 작성 0-100인쇄 (200) 임의의 숫자

에서 임의의 숫자를 반환하는 함수 getrand100() 있습니다. getrand100()을 호출하여 1에서 100까지 임의의 숫자를 얻을 수 있습니다.

어떻게 도와 주시겠습니까?

+0

C와 Java를 모두 정의 했으므로 어느 쪽이 좋습니까? – fge

+1

이 숙제가 있습니까? – PeeHaa

+0

예 숙제 나는 논리를 찾고 있으므로 어느 쪽에서도 구현할 것입니다. –

답변

4

0에서 200까지의 숫자 배열을 만듭니다. 그런 다음 Fisher-Yates Shuffle을 사용하여 임의로 섞습니다. 당신의 getrand100 기능은 0에서 100 번호를 제공하기 때문에

는이 같은 쓰기 :

int rnd = getrand100(); 
int scale = getrand100(); 
if (scale >= 50) 
    rnd += 100; 

당신에게 임의의 숫자를 줄 것이다 0에서 실제로 200

에를, 그것은 조금 더 복잡 그 이유는 난수의 범위가 변경되기 때문입니다. 즉, 처음에는 0부터 200까지의 난수를 생성하려고합니다. 다음에 0에서 199까지, 198에서 197 등등과 같이 임의의 숫자를 스케일 할 수있는 방법이 필요합니다. 다음과 같은 것이 균등 분포에 가까워 질 것입니다.

int rnd = getrand100(); 
double frnd = rnd/100.0; 
int realRnd = round(frnd * range); 

반올림 기능이 있다고 가정합니다. range이 귀하의 범위 중 최고입니다. 따라서 첫 번째 전화 range은 200, 199 등입니다.

2 자리 숫자로만 작업하므로 완벽하게 균일 한 배포를 제공하지는 않지만 교실에서는 만족스러운 결과를 얻을 수 있습니다. 할당.

+1

중복은 어떨까요? – Hogan

+1

@Hogan : 중복은 Fisher-Yates Shuffle에서 문제가되지 않습니다. 배열이 섞여 출력됩니다. Wikipedia 기사를 읽으십시오. –

+1

요구 사항. OP는 중복 될 수 없다고 대답 했으므로 문제가 해결되지 않습니다. – Hogan

2

균등 분배가 필요 없으므로 getrand200()getrand100() + getrand100()으로 정의하십시오. 숫자 1-200의 배열을 만듭니다. getrand200을 사용하여 Fisher–Yates shuffle 알고리즘의 기울임 버전을 구현합니다.