【问题标题】:randomize numbers without any std- function在没有任何标准函数的情况下随机化数字
【发布时间】:2016-12-29 21:20:24
【问题描述】:

我需要帮助来处理没有任何标准功能的随机数。我怎样才能做到这一点?我知道我可以使用随机函数来做到这一点:

v2 = rand() % 36 + 1; 

这将随机化 1-35 之间的数字,但 rand() 函数属于“ (stdlib.h)”标准。

【问题讨论】:

  • 你能解释一下为什么你不能使用标准库吗?这看起来像是一个非常武断(和愚蠢)的限制。
  • 在互联网上寻找伪随机数生成器并实现一个。
  • 生成介于 1 和 36 之间的整数。
  • @Angew:很可能是学校作业。
  • int random() { return 7; }

标签: c++ c++11 visual-c++


【解决方案1】:

我在 stackoverflow 上发现了类似的问题:How do I generate random numbers without rand() function?

我对生成 0-35 和最终解决方案之间进行了少许修改:

#include<stdio.h>
#include<time.h>
int main()
{
    int num = 36;
    time_t sec;
    sec=time(NULL);
        for(;;)
        {
            sec=sec%3600;
            if(num>=sec)
            {
            printf("%ld\n",sec);
            break;
            }
            sec=sec%num;
        }
    return 0;
}

这里我们使用&lt;time.h&gt;for time 而不是&lt;stdlib.h&gt; for rand() 如果我们不希望 0 作为答案,那么我们可以添加

while(sec==0)
{
    sec=time(NULL); 
}

在此声明之前:sec=sec%3600;

【讨论】:

    【解决方案2】:

    您可以使用硬件随机数生成器:

    #include <iostream>
    #include "immintrin.h"
    
    int main()
    {
        unsigned int val;
        _rdrand32_step(&val);
        std::cout << val;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 2011-11-28
      • 2021-11-23
      • 1970-01-01
      • 2018-10-29
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多