C++如何随机生成[-99,99]区间内的整数?
C++ 生成[-99,99]区间随机整数的正确实现
现有代码错误原因
你编写的代码array[i][j] = rand() % 99 + (-99);存在逻辑错误:
rand() % 99的取值范围是0到98,合计仅99种随机结果- 加上-99偏移后整体取值范围变为*-99到-1*,所以只能输出负区间的数值
正确实现方案
方案1:基于传统rand函数修正
[-99,99]区间合计有199个不同整数,需要先生成0到198范围的随机数,再偏移-99即可覆盖目标区间,修正后代码如下:
// 注意:使用rand生成随机数前,需要在程序入口处调用一次srand((unsigned int)time(NULL))设置随机种子,否则每次运行生成的随机序列一致 void input(int array [row][col]){ for (int i = 0; i < row; i++){ for (int j = 0; j < col; j++){ array[i][j] = rand() % 199 - 99; } } }
方案2:C++11及以上版本推荐实现(随机数均匀性更好)
使用标准库提供的
#include <random> void input(int array [row][col]){ // 随机数生成器和分布规则全局仅需初始化一次,static修饰避免重复创建 static std::random_device rd; static std::mt19937 gen(rd()); static std::uniform_int_distribution<int> dist(-99, 99); for (int i = 0; i < row; i++){ for (int j = 0; j < col; j++){ array[i][j] = dist(gen); } } }
内容的提问来源于stack exchange,提问作者matej samolej
相关产品推荐
相关产品推荐

