本篇主要是参考 lua连续随机数 这篇文章完成。大家可以去原贴查看学习。

生成随机数组,暂时发现两种方法

1、把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都想到这个方法)

2、先生成一个连续的数字表t,每次随机一个数n,把t[n]保存,并移除t[n]

首先,说一下我的真实需求是给定一定范围,然后生成指定个数的不重复随机数组。这个给定范围,可能很大,可能很小,指定个数可能比数组个数大,也可能只比数组个数小一点,也可能比数组个数小很多。

例如,1、从1~100,这100个数内,随机生成10个不重复数字数组。

  2、从1~1000,这1000个数内,随机生成10个不重复数字数组。

  3、从1~15,这15个数内,随机生成10个不重复数字数组。

当需求是例2时,生成方法一没有任何问题。

需求是例1时,生成方法一也凑合没问题。

但是,当需求是例3时,生成方法三的重复概率过高,使得随机次数无限增大(我的机器就直接卡死不动来进行反抗)。

根据需求,于是用生成方法二生成随机数。

下文附上原贴中的代码(我要去吃饭了,自己的代码就先不贴了):

--产生1~~m,若有n的则m~~n的数字表
function table.fillNum(m,n)
local j,k
if n then
j=m
k=n
else
j=
k=m
end local t={}
for i=j,k do
table.insert(t,i)
end
return t end --产生不相同的从m到n,一共cnt个随机数表
function math.randomx( m,n,cnt ) --方法1
if cnt>n-m+ then
return {}
end
local t = {}
local tmp = {}
math.randomseed(os.time())
while cnt> do
local x =math.random(m,n)
if not tmp[x] then
t[#t+]=x
tmp[x]=
cnt=cnt-
end
end
return t
end
--同上 (我对方法2做了修改,以符合自己的需求)
function math.randomEx(m,n,cnt) --方法2
    local tmp=table.fillNum(m,n)
    if cnt>n-m+ then
return tmp
end
local x=
local t={}math.randomseed(os.time())
while cnt> do
x=math.random(,n-m+)
table.insert(t,tmp[x])
table.remove(tmp,x)
cnt=cnt-
m=m+ end
return t
end t=math.randomx(, , )
for i=, do
print(t[i])
end
print("...........")
t=math.randomEx(, , )
for i=, do
print(t[i])
end

Lua在给定范围内,生成指定个数不重复随机数组的更多相关文章

  1. 生成32位UUID及生成指定个数的UUID

    参考地址:https://blog.csdn.net/xinghuo0007/article/details/72868799 UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯 ...

  2. random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串

    openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...

  3. shell 生成指定范围随机数与随机字符串 .

    shell 生成指定范围随机数与随机字符串         分类:             shell              2014-04-22 22:17     20902人阅读     评 ...

  4. Java获取随机数获取制定范围指定个数不重复的随机数

    一.JDK中提供的两种方式 1.Math类中的random()方法public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0 [0. ...

  5. PHP生成一个不重复随机数组的封装方法

    <?php /** array unique_rand( int $min, int $max, int $num )* 生成一定数量的不重复随机数* $min 和 $max: 指定随机数的范围 ...

  6. (php)生成指定个数的随机红包

    <?php $total=20;//红包总金额 $num=10;// 分成10个红包,支持10人随机领取 $min=0.01;//每个人最少能收到0.01元 $redpack = new red ...

  7. 22. Generate Parentheses生成指定个括号

    生成指定个数的括号,这些括号可以相互包括,但是一对括号的格式不能乱(就是配对的一个括号的左括号要在左边,右括号要在右边) 思维就是从头递归的添加,弄清楚什么时候要添加左括号,什么时候添加右括号 有点像 ...

  8. PHP 生成随机数组

    /** 生成指定个数,以及最小最大值随机数组(包括最大值) * @parem $min 随机数组最小值 * @parem $max 随机数组最大值 * @parem $num 随机数组个数,默认max ...

  9. JS生成指定范围内的随机数(支持随机小数)

    直接需要函数的话,直接到文章的最后面找. ============================================================= 转载:https://www.cn ...

随机推荐

  1. Windows 8.1 应用再出发 (WinJS) - 几种新增控件(2)

    上篇我们介绍了Windows 8.1 和 WinJS 中新增控件中的 AppBarCommand.BackButton.Hub.ItemContainer,本篇我们接着来介绍 NavBar.Repea ...

  2. mvc-servlet---ServletConfig与ServletContext对象详解(转载)

    ServletConfig与ServletContext对象详解 一.ServletConfig对象    在Servlet的配置文件中,可以使用一个或多个<init-param>标签为s ...

  3. 一些常用的Bootstrap模板资源站

    2013-11-13 23:28:09   超级Bootstrap模板库:http://www.wrapbootstrap.com/ 免费的HTML5 响应式网页模板:http://html5up.n ...

  4. [2013 Final] Colors

    Description Ziyao has a big drawing board with N * M squares. At the beginning, all the squares on t ...

  5. sqlplus启动后的环境SQLPATH的设置

    sqlplus启动时会查找和加载的两个文件login.sql和glogin.sql.其中glogin.sql文件默认存放在$ORACLE_HOME/sqlplus/admin目录下,login.sql ...

  6. How Delete File with Readonly Permission?

    class Program { static void Main(string[] args) { string file=@"E:\readme.txt"; try { File ...

  7. python __del__

    python __del__ 转自:http://blog.csdn.net/bbdxf/article/details/25774763 最近学习<Python参考手册>学到Class部 ...

  8. [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)

    上一节链接:http://www.cnblogs.com/zjutlitao/p/4116783.html 前言: 在上一节中我们已经大致介绍了该软件的是什么.可以干什么以及界面的大致样子.此外还详细 ...

  9. jQuery的XX如何实现?——4.类型检查

    往期回顾: jQuery的XX如何实现?——1.框架 jQuery的XX如何实现?——2.show与链式调用 jQuery的XX如何实现?——3.data与cache机制 -------------- ...

  10. Spring-Context之二:使用Spring提供的测试框架进行测试

    Spring框架是无侵入性的,所以你的代码可以完全是POJO(plain old java object),直接使用Junit就可以完成大部分的单元测试.但是在集成测试方面就比较吃力了.单元测试层面你 ...