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

C++ C++;如何生成介于-32到32或-64到64之间的随机数并排除值零?,c++,C++,如何生成介于-32到32或-64到64之间的随机数,并排除值零,以及数组中的重复数?我正在尽可能高效地生成它 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, exclud

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

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()进行一次调用即可:


只需从0、…、127范围内生成随机数,然后进行一些算术运算即可:

int r = rand() % 128 - 64;  
if (r >= 0) r++;
这可能比多次调用PRNG更快。顺便说一句,我建议使用C++11随机库而不是
rand
函数


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

生成一个包含零的范围内的数,如果得到零,则生成另一个数如何?@Someprogrammerdude我在想,如果你的随机函数是一致的,该方法是否仍会生成一致的输出。我的意思是忽略不需要的数字。我认为输出将不再是统一的。你所说的“和数组中的重复项”是什么意思?什么数组?请阅读,以及。最后,学习如何创建一个数组。就像我试图通过生成从-64到64的随机数,在绝对值中不包含0或重复项,将值放入数组中一样;例如,数组中不能有64和-64,但也可以只有一个或另一个。处理零情况的好方法!如果有一个关于代码在做什么以及为什么这样做的解释,这个答案可能会更好。尤其是
的使用对于初学者来说看起来很奇怪。它甚至需要
?是否存在对
bool
的隐式强制转换?已删除
操作有利于更可读的内容。调用PRNG 3次将效率低下。我尝试时得到的值大于64 thothis@Blastfurnace你说得对,我的错。现在修好了。
int r = rand() % 128 - 64;  
if (r >= 0) r++;