You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C++从输入的数组元素中生成单个随机数?

解决数组随机选元素的问题

首先得修正你原代码里的一个严重bug:你在读取数组长度n之前就执行了array = new int[n];,这时候n是未初始化的垃圾值,会导致数组分配的内存完全不对,必须把内存分配的代码移到cin >> n;之后。

接下来实现随机选取数组元素的功能,推荐用C++11及以后的<random>库(比老的rand()更靠谱,避免伪随机的问题),具体步骤如下:

  1. 引入<random>头文件
  2. 在排序完成后,创建随机设备、随机引擎和整数分布器,生成一个范围在0到n-1之间的随机索引
  3. 通过这个随机索引从数组中取出元素并输出

下面是修改后的完整代码:

#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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:25:26