c++ 随机数生成方法 c++ rand函数用法教程

1次阅读

c++中常用rand()生成随机数,需配合srand(time(0))设置种子以避免重复序列,通过rand()%(b-a+1)+a可生成指定范围整数,但其随机质量有限,C++11推荐使用库中的mt19937和uniform_int_distribution获取更优分布。

c++ 随机数生成方法 c++ rand函数用法教程

在C++中生成随机数,常用的方法是使用标准库中的 rand() 函数。虽然它不是最精确或最现代的方式,但在许多基础程序和算法中仍然广泛使用。下面详细介绍 rand() 的用法以及如何正确生成随机数。

1. 使用 rand() 生成基本随机数

rand() 函数定义在 cstdlib 头文件中,调用时不需要参数,返回一个从 0 到 RAND_MAX 之间的整数(包含两端)。RAND_MAX 是一个系统常量,通常为 32767 或更大。

示例代码:

#include <iostream> #include <cstdlib> using namespace std; <p>int main() { cout << "随机数1: " << rand() << endl; cout << "随机数2: " << rand() << endl; return 0; }

运行这段代码会发现每次输出的“随机数”其实都一样。这是因为 rand() 使用的是伪随机数生成器,需要一个“种子”来初始化序列。

立即学习C++免费学习笔记(深入)”;

2. 使用 srand() 设置随机种子

为了使每次运行程序时得到不同的随机数序列,必须使用 srand() 函数设置随机种子。通常结合 time(0) 来获取当前时间作为种子。

正确做法示例:

#include <iostream> #include <cstdlib> #include <ctime> using namespace std; <p>int main() { srand(time(0));  // 以当前时间作为种子 cout << "随机数1: " << rand() << endl; cout << "随机数2: " << rand() << endl; return 0; }

注意:srand() 应该只调用一次,通常放在程序开始处。多次调用可能导致重复序列,尤其是时间间隔很短的情况下。

3. 生成指定范围内的随机数

使用 rand() % N 可以生成 0 到 N-1 的整数。若要生成 [a, b] 范围内的随机整数,可以使用以下公式:

c++ 随机数生成方法 c++ rand函数用法教程

PHP的使用技巧集

PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多。下面介绍了十个PHP高级应用技巧。 1, 使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里

c++ 随机数生成方法 c++ rand函数用法教程 454

查看详情 c++ 随机数生成方法 c++ rand函数用法教程

rand() % (b – a + 1) + a

例子:生成1到100之间的随机整数

int random_num = rand() % 100 + 1;

完整示例:

#include <iostream> #include <cstdlib> #include <ctime> using namespace std; <p>int main() { srand(time(0)); for (int i = 0; i < 5; ++i) { cout << "第" << i+1 << "个随机数: " << (rand() % 100 + 1) << endl; } return 0; }

4. rand() 的局限性与现代替代方案

rand() 存在一些问题:

  • 随机质量不高,低位周期短
  • RAND_MAX 值较小,影响大范围生成
  • 不同平台行为可能不一致

C++11 推荐使用 头文件中的现代随机数工具,例如:

#include <iostream> #include <random> using namespace std; <p>int main() { random_device rd;  // 真实随机设备(用于种子) mt19937 gen(rd()); // 梅森旋转算法 uniform_int_distribution<int> dis(1, 100);</p><pre class="brush:php;toolbar:false;">for (int i = 0; i < 5; ++i)     cout << dis(gen) << " "; cout << endl; return 0;

}

这种方式更可靠、分布更均匀,适合对随机性要求较高的场景。

基本上就这些。对于简单项目,rand() + srand(time(0)) 完全够用;追求高质量随机数时,建议转向 库。不复杂但容易忽略细节。

text=ZqhQzanResources