生成1-33中的6个随机数,无重复

------------------------------------------------------------------------



 

方法1.每生成一个随机数,便于前面的所有随机数进行比较,如果有重复,则舍去不要,重新选取。

但该方法十分费时,并且在数据量巨大的并且有一定限制的时候,会引发巨大问题。

例如要生成10000个随机数,范围是0-9999,且不能重复,那么最后几个随机数有可能需要相当长的时间才能筛选出来。

方法2. 下面我们从另外一个角度来思考,

假设我们已经由一个数组长度为10000的数组,里面分别存储了数据0-9999,我现在的做法是想办法让10000个数进行随机排列,

便得到了这样一个随机数列,如果我只要其中的100个数,那么从前面取出100个就好。这里利用algorithm.h里面的一个函数
random_shuffle
,来进行简单处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
void randperm(int Num)
{
vector<int> temp;
for (int i = 0; i < Num; ++i)
{
temp.push_back(i + 1);
}
random_shuffle(temp.begin(), temp.end());
//for (int i = 0; i < temp.size(); i++)
for (int i = 0; i < 6; i++)
{
cout << temp[i] << " ";
}
}
int main()
{
randperm(33);
return 0;
}

方法3.使用链表(先sort在unique可以去重) 或者 set

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>
#include <list>
#include <set>
int act_rand(int a,int b)
{
    
    int m = rand()%(b-a+1)+a;
      cout << "m = " << m << endl;
    return m;
}
void genRandomList()
{
  list<int> l;
    while( l.size() < 6)
    {
        int randnum=act_rand(1,6);
        l.push_back(randnum);
        l.sort();
        l.unique();
    }
     
    list<int>::iterator it;//迭代器
    for (it = l.begin(); it != l.end(); it++)
    {
        cout << *it << ' ';
    }
}
void genRandomSet()
{
  set<int> s;
    while( s.size() < 6)
    {
        int randnum=act_rand(1,33);
        s.insert(randnum);
  
    }
     
    set<int>::iterator it;//迭代器
    for (it = s.begin(); it != s.end(); it++)
    {
        cout << *it << ' ';
    }
}

参考:

c++生成不重复的随机整数 - ~~(v_v)~~ - CSDN博客

http://blog.csdn.net/pythontojava/article/details/45132059

C++中随机数和不重复的随机数 - 朝拜SUNS - 博客园

http://www.cnblogs.com/salan668/p/3652532.html

(1)C++产生不重复的随机数_金庭波_新浪博客

http://blog.sina.com.cn/s/blog_4522f0b8010008r5.html

使用C++生成1-33中的6个随机数,无重复的更多相关文章

  1. js中var的有或无--重复声明和以后的声明

    js中var的有或无--重复声明和以后的声明 使用var语句多次声明一个变量不仅是合法的,而且也不会造成任何错误. 如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色. 如果重复 ...

  2. ZeroMQ接口函数之 :zmq_z85_decode – 从一个用Z85算法生成的文本中解析出二进制密码

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_z85_decode zmq_z85_decode(3)         ØMQ Manual - ØMQ/4.1 ...

  3. 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题

    我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...

  4. 关于cxf生成客户端代码中的JAXBElement<String>

    1.使用自动生成的java文件中的 ObjectFactory构造入参 关于cxf生成客户端代码中的JAXBElement<String>    在使用cxf或者x-fire进行webse ...

  5. 逆向工程生成的mybatis中mapper文件。mapper接口,实例化成对象

    逆向工程生成的mybatis中mapper文件中,*mapper文件只是接口,而不是类文件.但是却可以通过spring的容器获得实例. 例如: //1.获得mapper代理对象,从spring容器获得 ...

  6. vue-cli+webpack在生成的项目中使用bootstrap方法(二)

    vue-cli+webpack在生成的项目中使用bootstrap方法(一)中,是通过手动下载bootstrap库,然后手动添加到src/assets中,显然是过程太多. 当然是可以更省力些,可以通过 ...

  7. 2.6.33中关于at91sam9260的i2c controller驱动的问题

    在为at91sam9260移植2.6.33内核的I2C时,直接用driver/bus/i2c-at91.c这个iic的adapter驱动是不能用的,而且在makemenuconfig时,在device ...

  8. mybatis生成的pojo 中的属性或方法不够我们当做dto使用时

    我们在写代码的时候,如果一个 mybatis生成的pojo 中的属性或方法不够我们使用(当做dto和前台交互)时,我们有两种方法: 第一: 直接在 原 pojo 中增加属性或者方法 第二:我们可以再写 ...

  9. 怎样避免在EF自己主动生成的model中的DataAnnotation被覆盖掉

    相信非常多人刚接触EF+MVC的时候,会有这个疑问.就是当我们在model类中加验证信息的时候.会在又一次生成model的时候被重写掉. 这里介绍一个方法: 比方我有个Employee类是从数据库中生 ...

随机推荐

  1. Linux学习笔记之Linux启动级别

    对于绝大多数Linux程序员来说,进入Linux系统后一般看到的是黑乎乎的界面(开发模式),因为系统如果启动选择开发模式,会减少启动时间,优化内存等.但是通常我们刚安装完Linux系统,然后进去以后是 ...

  2. 20155201 实验四《Java面向对象程序设计》实验报告

    20155201 实验四<Java面向对象程序设计>实验报告 一.实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局 ...

  3. Xcode7.2与iOS9之坑 (持续更新)

    GitHub地址 前几天升级OS X EI Capitan 10.11.1, 以及Xcode7.1,正好赶上公司新产品上线,要做iOS9的适配,遇到各种坑,各种查资料,随之记录总结一下遇到的坑. 先说 ...

  4. spark 累加历史 + 统计全部 + 行转列

    spark 累加历史主要用到了窗口函数,而进行全部统计,则需要用到rollup函数 1  应用场景: 1.我们需要统计用户的总使用时长(累加历史) 2.前台展现页面需要对多个维度进行查询,如:产品.地 ...

  5. windows java 环境变量配置

    第一步 找到系统设置环境变量的位置(windows 10): 控制面板\系统和安全\系统   点击 ‘高级系统设置’ 就可以看到   “环境变量”  了 第二步 设置3个路径 1.path (配置JD ...

  6. Hive 建外链表到 Hbase(分内部表、外部表两种方式)

    一. Hive 建内部表,链到hbase :特点:Hive drop表后,Hbase 表同步删除 drop table if exists hbase_kimbo_test1;CREATE TABLE ...

  7. 使用actioncable做的notification(GoRails教学,2课)

    GoRails视频系列: 1.   用actioncable建立Notifications 2.  见博客: 3.  非认证/登陆user不能使用actioncable 用ActionCable 建立 ...

  8. vue-cli如何添加多种环境变量

    vue-cli如何添加多种环境变量 目前webpack(vue-cli) 打包有两种变量,development, productor, 如何添加一个 test的测试环境呢 vue-cli 3.0 v ...

  9. HTTP相关知识点

    一.工作原理       HTTP协议工作于客户端-服务器架构上.浏览器作为HTTP客户端通过URL向HTTP服务端(即web服务端)发送所有请求. Web服务器接收到请求后,向客户端发送相应的响应信 ...

  10. ENUMSTXT.H中的指针数组

    /************************************************************************                            ...