随机非重复数字

时间:2014-10-14 15:04:58

标签: c++

我有一个使用random_shuffle生成非重复随机数的函数。我希望将该功能调用n次并使其生成n个不同列表的非重复随机数。我很确定我必须使用srand函数,但我不确定如何。

// 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';

}

2 个答案:

答案 0 :(得分:1)

这是一个srand函数,可以使结果为您提供一些广泛使用的伪随机数:

srand(time(NULL));

您只能为随机值生成器播种一次,因此请勿将其置于循环中 如果你这样做,它将无法正常运作。

答案 1 :(得分:1)

你应该只对随机生成器播种一次。

移动

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

进入main。

如果你的函数在不到一秒的时间内执行,你下次将使用相同的种子重新生成生成器,为你提供相同的序列。