每小时获取一个唯一的随机数

时间:2016-08-12 13:06:50

标签: c

我想知道在C每小时获得一个唯一随机数的最佳方法是什么。我有小时,月份,月份和星期几的整数,并希望每小时得到0到8之间的随机数。最初我尝试None,但我认为它经常重复某些数字。会有更好的方法吗?

2 个答案:

答案 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;
}
相关问题