• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua在给定范围内,生成指定个数不重复随机数组 lua连续随机数 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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=1
        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+1 then
        return {}
    end
    local t = {}
    local tmp = {}
    math.randomseed(os.time())
    while cnt>0 do
        local x =math.random(m,n)
        if not tmp[x] then
            t[#t+1]=x
            tmp[x]=1
            cnt=cnt-1
        end
    end
    return t
end
--同上 (我对方法2做了修改,以符合自己的需求)
function math.randomEx(m,n,cnt) --方法2
    local tmp=table.fillNum(m,n)
    if cnt>n-m+1 then
        return tmp
    end
    local x=0
    local t={}math.randomseed(os.time())
    while  cnt>0 do
       x=math.random(1,n-m+1) 
       table.insert(t,tmp[x])
       table.remove(tmp,x)
       cnt=cnt-1
       m=m+1
      
    end
    return t
end


t=math.randomx(11, 25, 6)
for i=1,6 do
  print(t[i])
end
print("...........")
t=math.randomEx(11, 25, 6)
for i=1,6 do
  print(t[i])
end

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
腾讯开源手游热更新方案,Unity3D下的Lua编程发布时间:2022-07-22
下一篇:
TIOBE 2011年4月编程语言排行榜:Lua接近TOP 10发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap