C ++如何生成-32到32或-64到64之间的随机数并排除零值?

时间:2018-11-09 07:25:18

标签: c++

如何生成-32到32或-64到64之间的随机数并排除零值,并在数组中重复?我正在尝试尽可能高效地生成它

2 个答案:

答案 0 :(得分:2)

int signext = (rand() % 2) ? 1 : -1;
int x = (rand() % 64 + 1) * signext;  // random value from -64 to 64, excluding 0
int y = (rand() % 32 + 1) * signext;  // random value from -32 to 32, excluding 0

这可以通过调用rand()来完成:

    int x = rand() % 128;
    x = ((x / 2) + 1) * ((x % 2) ? 1 : -1);

    int y = rand() % 64;
    y = ((x / 2) + 1) * ((x % 2) ? 1 : -1);

答案 1 :(得分:2)

只需生成0,...,127范围内的随机数,然后进行一些算术即可。

int r = rand() % 128 - 64;  
if (r >= 0) r++;

这可能比多次调用PRNG更快。顺便说一句,我建议使用C ++ 11随机库而不是rand函数。

如果您还需要检查生成的r是否在某个数组中,我建议先对该数组进行排序,然后尝试通过二进制搜索在内部找到r。如果找到它,只需跳过该随机数并生成另一个。