如何用C++从输入的数组元素中生成单个随机数?
解决数组随机选元素的问题
首先得修正你原代码里的一个严重bug:你在读取数组长度n之前就执行了array = new int[n];,这时候n是未初始化的垃圾值,会导致数组分配的内存完全不对,必须把内存分配的代码移到cin >> n;之后。
接下来实现随机选取数组元素的功能,推荐用C++11及以后的<random>库(比老的rand()更靠谱,避免伪随机的问题),具体步骤如下:
- 引入
<random>头文件 - 在排序完成后,创建随机设备、随机引擎和整数分布器,生成一个范围在
0到n-1之间的随机索引 - 通过这个随机索引从数组中取出元素并输出
下面是修改后的完整代码:
#include <iostream> #include <random> // 引入随机数库 using namespace std; int main() { int n; int* array; cout << "Masukkan ukuran array" << endl; cin >> n; array = new int[n]; // 修正:读取n后再分配内存 cout << "Masukkan nilai array" << endl; for (int i = 0; i < n; i++) { cin >> array[i]; } cout << "hasil array adalah" << endl; for (int i = 0; i < n; i++) { cout << array[i] << " "; } cout << endl << "hasil urut adalah" << endl; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (array[j] < array[i]) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } // 移除无意义的else;语句 } } for (int i = 0; i < n; i++) { cout << array[i] << " "; } // 新增:随机选取元素并输出 cout << endl << "随机选取的元素是:" << endl; random_device rd; // 获取随机种子 mt19937 gen(rd()); // 初始化随机引擎 uniform_int_distribution<> distr(0, n-1); // 定义0到n-1的均匀分布 int random_idx = distr(gen); // 生成随机索引 cout << array[random_idx] << endl; delete[] array; // 释放动态分配的内存,避免内存泄漏 return 0; }
关键说明:
random_device用来获取真实的随机种子(依赖系统硬件支持),如果你的环境不支持,可以用mt19937 gen(time(nullptr));替代,但后者随机性稍差,且不要在短时间内多次调用(比如循环内)。uniform_int_distribution<> distr(0, n-1)确保生成的索引正好在数组合法范围内,不会出现越界访问。- 必须用
delete[] array;释放动态分配的数组,避免内存泄漏问题。
内容的提问来源于stack exchange,提问作者Kelvin Adimas Wijaya
相关产品推荐
相关产品推荐

