2014-11-30 2 views
-2

사전에서 임의의 단어를 선택하려고합니다. 임의의 숫자를주는 대신 프로그램을 실행할 때마다 순차적으로 숫자가 증가합니다. 예를 들어 17010을 실행하면 어딘가에 17025 정도 또는 다음 실행합니다. 도움이된다면 는, 사전의 길이가 사전에 주위 44000.순차적 난수 C++

//I initialize srand(time(0)) in my main function 
    int numRand = std::rand()%Dictionary.size(); 
    std::string wordOne = Dictionary[numRand].getWord(); 
    sylCount -= Dictionary[numRand].getSylls(); 

감사입니다 :

여기 내 코드입니다!

+2

난수 엔진을 시드하기 위해'srand()'를 호출하는 것을 잊었습니까? 예 : 'main()'에서'srand (time (NULL));'를 한 번 호출하십시오. –

+1

'rand()'를 사용하지 마십시오. 가장 나쁜 PRNG 중 하나입니다. Boost에서 mt19937과 같은 적당한 PRNG를 사용하십시오. – pjs

+0

17010 및 17025는 순차적이 아닙니다. –

답변

2

C++ 11을 사용할 수 있으면 해당 라이브러리 <random>을 사용할 수 있습니다. 설명서는 here입니다. mt19937 생성기를 선호하십시오 - rand() 또는 그와 비슷한 것보다 높은 품질의 PRNG입니다.

프로그램을 실행할 때마다 순차적으로 숫자를 늘리려면 프로그램 종료시 숫자를 파일에 저장 한 다음 다시로드하고 a에서 임의 번호 생성을 수행해야합니다 루프, 당신이 이전보다 더 큰 숫자를 얻을 때까지 기다린다. (솔직히, 왜 프로그램을 실행할 때마다 증가해야하는지 잘 모르겠다 - 프로그램의 재생산 능력이 깨져서 테스트를 수행하는 데 방해가 될 수있다.)

+0

감사합니다. 나는 mt19937이 확실히 더 강력한 선택이라고 생각한다. 설명 주셔서 감사합니다. – chrisz

1

모듈러스 연산자 (%)는 rand()의 범위가 사전 크기의 배수가 아니면 임의적이지 않기 때문에 좋은 생각이 아닙니다.

즉, rand()의 범위가 0-9이고 사전 크기가 9 인 경우 0 % 9 = 0 및 9 % 9 = 0이므로 출력이 다른 숫자보다 0이되는 확률이 두 배가됩니다. .