Lua在給定範圍內,生成指定個數不重複隨機數組

2022-04-09 04:10:45 字數 1998 閱讀 3505

生成隨機數組,暫時發現兩種方法

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=1k=m

endlocal t={}

for i=j,k do

table.insert

(t,i)

endreturn

tend

--產生不相同的從m到n,一共cnt個隨機數表

function math.randomx( m,n,cnt ) --

方法1if cnt>n-m+1

then

return

{}

endlocal t ={}

local tmp ={}

math.randomseed(os.time

())

while cnt>0

dolocal x =math.random

(m,n)

ifnot tmp[x] then

t[#t+1]=x

tmp[x]=1

cnt=cnt-1

endend

return

tend

--同上(我對方法2做了修改,以符合自己的需求)

function math.randomex(m,n,cnt) --

方法2

local tmp=table.fillnum(m,n)

if cnt>n-m+1

then

return

tmp

endlocal x=0

local t={}

math.randomseed(os.time

())

while cnt>0

dox=math.random(1,n-m+1

)

table.insert

(t,tmp[x])

table.remove

(tmp,x)

cnt=cnt-1

m=m+1

endreturn

tend

t=math.randomx(11, 25, 6

)for i=1,6

doprint

(t[i])

endprint("

...........")

t=math.randomex(11, 25, 6

)for i=1,6

doprint

(t[i])

end

Excel按照指定概率生成選定範圍內數字

今天有這麼乙個需求,需要按照指定的概率比如20 40 40 的概率對應生成1 2 3這3個數字 excel中如何實現呢?應該用什麼函式呢?引數又是什麼呢?首先這個功能不是單一的excel函式可以解決的需要兩個函式,分別是lookup和rand 最終的結果如下 lookup rand 100,這裡面需...

c 生成指定範圍內的隨機數

函式名稱 randgenerator 隨機數發生器 引數 dwrandmaxval 隨機數最大值 dwrandminval 隨機數最小值 dwrandcount 隨機數個數 mrandvalue 隨機數結果 itor first 儲存的隨機數 itor second 保留沒有 返回值 return ...

輸出指定範圍內的所有質數

以上程式輸出所有不大於999的質數,產生格式化輸出。程式採用篩選的思想對指定範圍內的所有正整數進行排除,最後得以 倖存 的全部都為質數。該演算法思想詳見維基百科sieve of eratosthenes相關條目。需要注意的是以上c 實現中的外層迴圈只用進行到sqrt upper 證明如下 假設存在乙...