【问题标题】:Seeding rand() in C with Specified Values使用指定值在 C 中播种 rand()
【发布时间】:2020-08-25 11:29:16
【问题描述】:

如果您希望随机数生成器使用整数 2、5、7、4,并且您使用

为您的生成器播种
srand(2,5,7,4)

printf("%d \n",rand())

这样做有缺陷吗?

【问题讨论】:

  • 似乎您期待从指定数组生成的数字,不是吗?
  • srand 只接受一个参数,所以这是行不通的。您的编译器是否对此发出警告?您可能需要启用更多警告。
  • True @Ry-,GDB编译器直接抛出错误,提供了太多参数。
  • @LinuX Man 所以我可以先创建一个数组并使用对该 arr 的单个调用作为 srand 的参数?
  • 如果种子是常量 int ,它将产生相同的数字而不是新的随机数。如果您对它的工作原理感到好奇,可以查看此站点。 en.m.wikipedia.org/wiki/Pseudorandom_number_generator

标签: c random-seed seeding


【解决方案1】:

这不是它的工作原理。 PRNG 使用一种算法来生成具有随机行为的数字序列。对于给定的种子,将生成给定的数字序列,这些数字是多少完全取决于所使用的算法。

要获取列表的随机数,您需要以下内容:

n = list[rand() % (sizeof(list) / sizeof(list[0])];

【讨论】:

    【解决方案2】:

    如果您想在每次执行时从给定数组中随机打印一个值,您可以考虑使用以下方法:

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    
    int main() {
        srand ( time(NULL) ); // accepts one argument only
    
        int myArray[4] = { 2,5,7,4 }; // array required
        int randomIndex = rand() % 4; // limiting randomness
        int randomValue = myArray[randomIndex]; // choosing one of the random numbers
    
        printf("Random value from array: %d\n", randomValue); // simply prints
        return 0;
    }
    

    【讨论】:

    • 这很有见地。如果我想进一步打印一些随机数,其次数与存储为 *int 的 int 参数的次数相同,我什至可以使用简单的 for 循环将其添加到 printf 语句中。
    猜你喜欢
    • 2012-10-24
    • 2012-08-20
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2011-04-11
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多