随机数生成算法
在这里插入代码片
class Random {
int seed = time(NULL);
public:
/**
*
* @return 随机整数,范围在0~Int之内
*/
int randomInt() {
int randNumber;
srand(seed);
randNumber = (int) (((double) rand() / RAND_MAX) * INT_MAX);
seed = (seed + (int) (sqrt(seed) * sqrt(randNumber))) % (INT_MAX / 2);
if (randNumber == 0) {
seed = (int) (seed * 1.0001) % (INT_MAX / 2);
}
// if(seed == randNumber){
// seed = (seed % (int)sqrt(INT_MAX))*(seed % (int)sqrt(INT_MAX));
// } else{
// seed = randNumber;
// }
return randNumber;
}
/**
*
* @param min 最小值边界
* @param max 最大值边界
* @return 返回一个指定范围内的随机数
*/
int randomInt(int min, int max) {
if (max < min) {
cout << "sb" << endl;
return -1;
}
int randNumber;
srand(seed);
randNumber = (int) (((double) rand() / RAND_MAX) * INT_MAX);
seed = (seed + (int) (sqrt(seed) * sqrt(randNumber))) % (INT_MAX / 2);
if (randNumber == 0) {
seed = (int) (seed * 1.0001) % (INT_MAX / 2);
}
return randNumber % (max - min) + min;
}
};
该算法避免了生成随机数的时候大量重复,范围在10w以内重复率可接受,我能接受,你不一定,如果有好的修改意见可以在评论区回复,谢谢带佬!