使用C++生成1-33中的6个随机数,无重复
生成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个随机数,无重复的更多相关文章
- js中var的有或无--重复声明和以后的声明
js中var的有或无--重复声明和以后的声明 使用var语句多次声明一个变量不仅是合法的,而且也不会造成任何错误. 如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色. 如果重复 ...
- ZeroMQ接口函数之 :zmq_z85_decode – 从一个用Z85算法生成的文本中解析出二进制密码
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_z85_decode zmq_z85_decode(3) ØMQ Manual - ØMQ/4.1 ...
- 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题
我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...
- 关于cxf生成客户端代码中的JAXBElement<String>
1.使用自动生成的java文件中的 ObjectFactory构造入参 关于cxf生成客户端代码中的JAXBElement<String> 在使用cxf或者x-fire进行webse ...
- 逆向工程生成的mybatis中mapper文件。mapper接口,实例化成对象
逆向工程生成的mybatis中mapper文件中,*mapper文件只是接口,而不是类文件.但是却可以通过spring的容器获得实例. 例如: //1.获得mapper代理对象,从spring容器获得 ...
- vue-cli+webpack在生成的项目中使用bootstrap方法(二)
vue-cli+webpack在生成的项目中使用bootstrap方法(一)中,是通过手动下载bootstrap库,然后手动添加到src/assets中,显然是过程太多. 当然是可以更省力些,可以通过 ...
- 2.6.33中关于at91sam9260的i2c controller驱动的问题
在为at91sam9260移植2.6.33内核的I2C时,直接用driver/bus/i2c-at91.c这个iic的adapter驱动是不能用的,而且在makemenuconfig时,在device ...
- mybatis生成的pojo 中的属性或方法不够我们当做dto使用时
我们在写代码的时候,如果一个 mybatis生成的pojo 中的属性或方法不够我们使用(当做dto和前台交互)时,我们有两种方法: 第一: 直接在 原 pojo 中增加属性或者方法 第二:我们可以再写 ...
- 怎样避免在EF自己主动生成的model中的DataAnnotation被覆盖掉
相信非常多人刚接触EF+MVC的时候,会有这个疑问.就是当我们在model类中加验证信息的时候.会在又一次生成model的时候被重写掉. 这里介绍一个方法: 比方我有个Employee类是从数据库中生 ...
随机推荐
- 数据导入(二):MapReduce
package test091201; import java.io.IOException; import java.text.SimpleDateFormat; import java.util. ...
- 图解Git命令【转】
本文转载自:https://github.com/geeeeeeeeek/git-recipes/wiki/4.1-%E5%9B%BE%E8%A7%A3Git%E5%91%BD%E4%BB%A4 此页 ...
- Cannot perform runtime binding on a null reference
一个方法的参数是dynamic obj 方法内调用了obj.Header 但是外部传递进来的obj是null,然后就会报这个错.
- HDU 4183 Pahom on Water(最大流)
https://vjudge.net/problem/HDU-4183 题意: 这道题目的英文实在是很难理解啊. 给出n个圆,每个圆有频率,x.y轴和半径r4个属性,每次将频率为400的圆作为起点,频 ...
- 解决 vim 乱码
打开vim安装目录下的_vimrc,在头部加上几句配置语句就能搞定: //设置默认编码 set encoding=utf-8 set fileencodings=utf-8,chinese,latin ...
- AtomicLong可以被原子地读取和写入的底层long值的操作
java.util.concurrent.atomic.AtomicLong类提供了可以被原子地读取和写入的底层long值的操作,并且还包含高级原子操作. AtomicLong支持基础long类型变量 ...
- C# winform实现右下角弹出窗口结果的方法
using System.Runtime.InteropServices; [DllImport("user32")] private static extern bool Ani ...
- Android------实现图片双击放大,缩小,左右滑动的多种方式
项目中常常有图片浏览功能.像微信朋友圈图片浏览,QQ空间照片浏览 的功能. 实现图片双击放大,缩小,左右滑动等效果. 来看看我的效果图,希望能满足你的要求 前三个button按钮是参考网上的多种实 ...
- jxl将list导入到Excel中供下载
jxl操作excel /** * 分隔符 */ private final static String SEPARATOR = "|"; /** * 由List导出至指定的Shee ...
- Python3 元组Tuple(十二)
元组:tuple.tuple和list非常类似,但是tuple一旦初始化就不能修改 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 如下实例: tup1 ...