随机非重复数字

Random non-repeating numbers

本文关键字:数字 随机      更新时间:2023-10-16

我有一个函数,它使用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';

}

您应该只为随机生成器播种一次。

移动

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

进入主体。

如果您的函数在不到一秒钟的时间内执行,那么下次将使用相同的种子重新为生成器设定种子,从而获得相同的序列。

这里有一个srand函数,可以让结果给你一些广泛使用的伪随机数:

srand(time(NULL));

您只能对随机值生成器进行一次种子设定,所以不要将其放置在循环中
如果你这样做的话,它根本无法正常工作。