【发布时间】:2019-05-03 19:41:30
【问题描述】:
srand(time(NULL));
for(i = 0; i < 100; i++)
{
int randomNumber = (rand() % 100) + 1 // gets a random number from 0 - 100.
// do stuff
}
我目前有一个随机数变量,它在 for 循环的每次迭代中存储一个从 0 到 100 的数字,然后下面的代码使用该随机数变量进行处理。但是我注意到,在循环的每次迭代中,有时会生成相同的随机数,而有时它会生成一个非常接近我已经生成的数字。例如:当 i = 1 时,randomNumber 可能是 50,但当 i = 2 时,它可能是 51。这对于我正在编码的东西来说非常烦人。有没有一种方法可以做到,如果它第一次生成 50,第二次它必须生成一个与刚刚生成的整数相差 2 的整数。例如。如果它只是生成50,那么第二次它不能生成48,49,50,51,52,但它仍然生成0-100之间,只是跳过这些数字。然后在生成新的 randomNumber 时重复同样的事情。
【问题讨论】:
-
所以只要循环,直到你有一个合适的数字。
-
如果你需要 100 个介于 1 和 100 之间的数字而不被欺骗,用 1-100 填充一个数组并随机播放。
-
代码(最初)生成从 1 到 100 的数字,但注释说 0 到 100。需要哪个?
-
@EricPostpischil 他甚至还没有登上飞往这个国家的飞机,说出他真正想做的事情。他什么也没说,只是“我有这个号码,它的行为方式是这样的,我希望它也有这样的行为方式”。 为什么他想要那个?他是在试图展示看起来随机的点吗?他是否试图选择半随机问题进行测验?他是在试图改变音乐选择吗?这就是我们需要知道的帮助。
-
@LeeDanielCrocker:一些确认和澄清会有所帮助,但很可能请求是从 [1, 100] 中整数的均匀分布中抽取第一个样本,然后从 [1, 100] 中抽取后续样本[1, 100]−[x-2, x+2] 中整数的均匀分布,其中 x 是前一个样本。无论如何,您关于属性“恰好是随机数的属性”的说法是错误的且无益的。