2014-10-14 3 views
0

나는 비 반복 난수를 생성하기 위해 random_shuffle을 사용하는 함수를 가지고 있습니다. 나는 을 호출하여 해당 함수를 n 번이라고하고 은 n 개의 다른리스트를 생성합니다.은 반복되지 않는 난수입니다. 나는 내가 srand 기능으로 놀아야 만한다고 확신하지만 어떻게 확신 할 수 없다.임의의 반복되지 않는 숫자

srand(time(NULL)); 

당신은 한 번만 임의의 값 생성기를 시드 수 있으므로 :

// random generator function: 
int myrandom (int i) { return std::rand()%i;} 

void dealCards(); 

int main() { 
    for (int i=0; i<10; i++) { 
     dealCards(); 
    } 

    return 0; 
} 

void dealCards(){ 
    std::srand (unsigned (std::time(0))); 
    std::vector<int> myvector; 

    int myarray[32]; 

    // set some values: 
    for (int i=1; i<33; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9 

    // using myrandom: 
    std::random_shuffle (myvector.begin(), myvector.end(), myrandom); 

    std::cout << "myvector contains:"; 

    std::srand (unsigned (std::time(0))); 
    for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it){ 
     std::cout << ' ' << *it; 
    } 

    std::cout << '\n' << '\n'; 

} 여기

+1

프로그램에서 srand ONCE 만 호출하십시오. –

+0

제목에 "비 생성"대신 "비 반복"을 의미한다고 가정합니다. –

+0

@ ÉricMalenfant 예 감사합니다. – solalito

답변

1

랜덤 생성기는 한 번만 시드해야합니다.

메인으로 이동

std::srand (unsigned (std::time(0))); 

.

함수가 1 초 이내에 실행되면 다음 번에 같은 시드로 생성기를 다시 시드하여 동일한 시퀀스를 제공합니다.

+0

쉽고 분명했습니다 ... 감사합니다. – solalito

1

는 당신에게 널리 사용되는 일부 의사 난수를주는 결과를 만들 수있는부터 srand 기능입니다 루프에 넣지 마십시오.
당신이 그렇게한다면 그것은 단순히 기능하지 않을 것입니다.

+0

그는 이미이 기능을 사용하고 있으며, 어떻게 알고 싶어합니다. –

+0

"단지 필요합니다"는 실제로 정확하지 않습니다. 실제로는 두 번 이상 호출하는 것이 잘못 되었기 때문에 선택 사항이 아닙니다. (일반 용도로 사용하기 위해) –