随机数组生成,没有重复

 ____洋果子 发布于 2023-02-08 15:59

我正在尝试创建一些生成随机数组但没有重复值的东西.我已经看过其他答案,但似乎没有人帮助我理解.我想不出一种方法来实际生成不包含重复项的随机数.这是我到目前为止所尝试的:

srand(time(NULL));
int numbers [4];

for (int x=0; x!=4;x++)
{
    numbers[x] = 1 + (rand() % 4) ;
    printf("%d ", numbers[x]);
}

任何帮助将不胜感激.

Darklighter.. 17

您开始填充具有从中开始的连续元素的容器 0

std::iota(begin(vec), end(vec), 0);

然后你给自己一个像样的随机数发生器并正确播种

std::mt19937 rng(std::random_device{}());

最后你用rng来洗牌

std::shuffle(begin(vec), end(vec), rng);

住在coliru


在某些实现random_device上无法正常工作(最明显的是在Windows上使用gcc),您必须使用替代种子,即当前时间→ chrono.

2 个回答
  • 您开始填充具有从中开始的连续元素的容器 0

    std::iota(begin(vec), end(vec), 0);

    然后你给自己一个像样的随机数发生器并正确播种

    std::mt19937 rng(std::random_device{}());

    最后你用rng来洗牌

    std::shuffle(begin(vec), end(vec), rng);

    住在coliru


    在某些实现random_device上无法正常工作(最明显的是在Windows上使用gcc),您必须使用替代种子,即当前时间→ chrono.

    2023-02-08 16:01 回答
  • 首先rand()是genratig随机数,但不是重复.

    如果要生成没有重复的随机数组,则rand()方法根本不起作用.

    假设您要生成一个包含1000个数字的数组.在最好的情况下,比方说您生成的第一个999号没有重复和最后想到做的是产生最后一个数字.获得该数字的概率是1/1000,因此这几乎需要永远生成.实际上只有10个数字会造成很大麻烦.

    最好的方法是通过产生增量(您的所有数字或严格单调序列)是洗牌它们.在这种情况下,将没有重复

    以下是如何使用10个数字进行操作的示例.即使有1000个数字也能正常工作.

    注:从Suffle功能JHON Leehey的答案.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void shuffle(int *arr, size_t n)
    {
        if (n > 1) 
        {
            size_t i;
            srand(time(NULL));
            for (i = 0; i < n - 1; i++) 
            {
              size_t j = i + rand() / (RAND_MAX / (n - i) + 1);
              int t = arr[j];
              arr[j] = arr[i];
              arr[i] = t;
            }
        }
    }
    
    int main()
    {
        int i;
        int arr[10];
        for (i=0; i<10; i++){
            arr[i] = i;
        }
        shuffle(arr, 10);
        for (i=0; i<10; i++){
            printf("%d ", arr[i]);
        }
    }
    

    2023-02-08 16:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有