生成隨機數組,暫時發現兩種方法
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+1then
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 證明如下 假設存在乙...