如何生成-32到32或-64到64之间的随机数并排除零值,并在数组中重复?我正在尝试尽可能高效地生成它
答案 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
。如果找到它,只需跳过该随机数并生成另一个。