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

开发可生成指定数量且各数值均匀分布的Random Number Generator技术问询

生成等频随机整数填充Vector的实现方案

需求明确

  • 生成指定数量的int类型随机数,数值范围在min到max之间(包含边界值)
  • 每个数值的出现次数完全相等
  • 示例场景:当min=1、max=5、生成总数为10时,输出可类似[1,4,3,2,5,3,5,4,2,1]

实现思路

  1. 前置输入校验:必须确保生成总数是(max - min + 1)的整数倍,否则无法实现每个数值出现次数相等,这一步是核心前提
  2. 构建基础重复序列:计算每个数值需要重复的次数count = 生成总数 / (max - min + 1),生成包含每个数值重复count次的有序列表
  3. 随机打乱序列:用可靠的随机洗牌算法打乱有序列表,得到符合随机性要求的结果
  4. 填充目标Vector:将打乱后的序列直接存入目标Vector中

C++代码示例

#include <vector>
#include <random>
#include <algorithm>
#include <stdexcept>

void fillVectorWithEqualFreqRandom(std::vector<int>& vec, int min, int max, int totalCount) {
    int numRange = max - min + 1;
    // 输入合法性校验
    if (totalCount % numRange != 0) {
        throw std::invalid_argument("生成总数必须是数值范围的整数倍");
    }
    int repeatCount = totalCount / numRange;

    // 构建基础重复序列
    vec.clear();
    vec.reserve(totalCount);
    for (int i = min; i <= max; ++i) {
        vec.insert(vec.end(), repeatCount, i);
    }

    // 随机洗牌
    std::random_device rd;
    std::mt19937 rng(rd());
    std::shuffle(vec.begin(), vec.end(), rng);
}

代码说明

  • 输入校验:通过取余运算判断是否能均分,避免无效执行
  • 内存预分配:调用reserve提前分配内存,减少Vector扩容带来的性能损耗
  • 洗牌逻辑:使用std::mt19937高质量随机数生成器配合std::shuffle,保证打乱后的序列随机性足够可靠

内容的提问来源于stack exchange,提问作者Mads Mikkelsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:34:56