21xrx.com
2025-03-01 14:46:23 Saturday
文章检索 我的文章 写文章
如何在C++中生成随机数,而不使用rand函数
2023-07-02 22:28:35 深夜i     12     0
C++ 生成随机数 不使用rand函数

C++是一种广泛使用的编程语言,被用于各种应用,比如游戏、数据分析、网站开发等。在许多情况下,需要使用随机数来模拟或生成数据,例如在游戏中,需要随机生成地图或怪物的位置。而在C++中,最常见的方式是使用rand函数来生成随机数,但是使用rand函数并不总是可靠的,会产生重复的序列或者质量低的伪随机数。所以,在本文中,我们将介绍一些不使用rand函数生成随机数的方法。

1.使用时间戳

在不同时间生成的随机数是不同的,所以可以使用当前时间的时间戳来生成随机数。可以使用time.h头文件中的time函数获取时间戳,然后把它作为随机数的种子。

#include <time.h>
unsigned int seed = (unsigned int)time(NULL);
srand(seed);
int random = rand();

2.使用物理随机数生成器

硬件随机数生成器是一种真正的随机数生成器,它利用物理过程如热噪声等来生成随机数。C++可以使用/dev/random或/dev/urandom设备文件来访问物理随机数生成器。

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
  char buffer[4];
  ifstream urandom("/dev/urandom", ios::in|ios::binary);
  if (urandom.is_open())
  {
    urandom.read(buffer, 4);
    urandom.close();
  }
  else
  {
    cerr << "Error: Cannot open /dev/urandom" << endl;
    exit(1);
  }
  int* random = reinterpret_cast<int*>(buffer);
  cout << *random << endl;
  return 0;
}

3 .使用梅森旋转算法

梅森旋转算法(Mersenne Twister)是一种比较常用的随机数生成算法,它的周期长度很长,可以生成高质量的伪随机数。

#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
int main()
{
  random_device rd;
  mt19937 gen(rd());
  uniform_int_distribution<> dis(1, 100);
  int random = dis(gen);
  cout << setw(3) << random << endl;
  return 0;
}

总结:

在C++中生成随机数的方法有很多,本文介绍了一些不使用rand函数的方法,例如使用时间戳、物理随机数生成器或梅森旋转算法等。使用这些方法可以更好地生成随机数,提高程序质量。

  
  

评论区