• 随机不同的数


    需要从一个原始数据源(长度m,每个数不同)里随机出n个不同的数(n<=m)

    1     vector<int> rand_num_src;
    2     for (int i = 1; i <= 20; ++i)
    3     {
    4         rand_num_src.push_back(i);
    5     }
    6     
    7     int m = (int)rand_num_src.size();
    8     int n = 10;

    写法一:

    每随机出一个新的数,需要跟已经随机出来的数作比较,来保证每个数不同。但是while(true)始终是个危险的写法。

     1     vector<int> index_1;
     2     for (int i = 0; i < n; ++i)
     3     {
     4         while(true)
     5         {
     6             int ram_num = rand() % m + 1;
     7             bool sign = false;  
     8             for (int j = 0; j < (int)index_1.size(); j++) 
     9             {  
    10                 if (index_1[j] == ram_num) 
    11                 {                     
    12                     sign = true;  
    13                     break;                    
    14                 }          
    15             }  
    16             if (!sign)
    17             {  
    18                 index_1.push_back(ram_num);
    19                 break;
    20             }
    21         }
    22     }

    写法二:

    用一个新的vector记录数据源,随机出一个数,则把它从这个vector中去掉。下一次从这个新的vector中随机,这样同样保证每个数不同。

     1     vector<int> index_2;
     2     vector<int> random_list;
     3 
     4     for (int i = 0; i < m; ++i)
     5     {
     6         random_list.push_back(rand_num_src[i]);
     7     }
     8 
     9     for (int i = 0; i < n; ++i)
    10     {
    11         int rand_num_index = rand() % (int)random_list.size();
    12         index_2.push_back(random_list[rand_num_index]);
    13         random_list.erase(random_list.begin() + rand_num_index);
    14     }
  • 相关阅读:
    koa2跨域模块koa2-cors
    使用spring等框架的web程序在Tomcat下的启动顺序及思路理清
    logback 配置解析
    java 学习总结
    如何删除git远程分支
    C++11 锁 lock
    CAS 与 无锁队列
    docker 配置
    vim 中Taglist的安装和使用
    基于C++11的线程池,简洁且可以带任意多的参数
  • 原文地址:https://www.cnblogs.com/yao2yaoblog/p/6069407.html
Copyright © 2020-2023  润新知