我想知道在C每小时获得一个唯一随机数的最佳方法是什么。我有小时,月份,月份和星期几的整数,并希望每小时得到0到8之间的随机数。最初我尝试None
,但我认为它经常重复某些数字。会有更好的方法吗?
答案 0 :(得分:1)
一种简单的方法是执行以下操作:
int hourly_random()
{
srand(time(NULL)/3600);
return rand() % 8;
}
只是简单地乘以非随机整数就不会给你一些随机的东西。只是为了说明一些问题:如果其中一个值为0,结果将为0.如果交换两个输入变量的值,结果仍然是相同的。
如果您将该结果用作随机生成器的种子,也会出现这种情况。由于种子具有明确的模式,因此产生的随机数将遵循相同的模式。
如果你想使用你提到的变量,你应该把它们结合起来,这样它们就不会干扰"彼此。一种显而易见的方法是将子部分乘以您添加的最大值。就是hours + 24*(months + 12*(...))
。
当你以自己的方式生成随机数时,也许你应该看看现有的随机数生成器是如何工作的。也就是说,总的来说,由于所有的陷阱,你真的不想自己做这样的事情。依靠之前已经完成的工作可能更好。
答案 1 :(得分:1)
您不必每次都重新播种随机数生成器,而只需跟踪上次呼叫的完成时间。如果它在同一个小时内,则返回相同的值,否则获得一个新的随机值。
int hourly_random()
{
static time_t last = 0;
static int rand_val = 0;
time_t current;
current = time(NULL);
if (!last) {
srand(current+getpid());
}
if ((current/3600) > (last/3600)) {
last = current;
rand_val = rand() % 8;
}
return rand_val;
}