用vb程式設計實現隨機產生100到999之間的隨機數並

2021-03-11 10:15:49 字數 4799 閱讀 4622

1樓:司馬鑄劍

vba程式設計實現不重複隨機數輸出。vba裡的隨機函式是rnd,在工作表中隨機函式是rand,一字e68a8462616964757a686964616f31333363393566之差,可要記好了。rnd取值範圍是[0,1),意思是0和1之間的一個隨機數,包含0,但不包含1。

1、用法

語法:rnd[(number)]

如果 number 的值是 randomize 生成

小於 0 ,每次都使用 number 作為隨機數種子得到的相同結果。

大於 0 ,以上一個隨機數為種子產生下一個隨機數。

等於 0 ,產生與最近生成的隨機數相同的隨機數。

省略, 以上一個隨機數為種子產生下一個隨機數(同大於0)。

說明:rnd 函式返回小於 1 但大於或等於 0 的值。

number 的值決定了 rnd 生成隨機數的方式。

對最初給定的種子都會生成相同的數列,因為每一次呼叫 rnd 函式都用數列中的前一個數作為下一個數的種子。

在呼叫 rnd 之前,先使用無引數的 randomize 語句初始化隨機數生成器(若帶引數,則產生由引數對應的一個特定序列的隨機數),該生成器具有根據系統計時器得到的種子。如果不使用randomize 語句,那麼每次執行程式時產生的隨機數序列是相同的。

rnd 後面跟一個負數時,同樣的引數可以得到完全相同的兩個序列,例如,rnd -1執行後用rnd取1000個隨機數,然後再執行rnd -1,然後再用rnd取1000個隨機數,這1000個隨機數和前面1000個完全相同。為了得到不同的序列,可以用不同的負數,也可以在rnd -1後面執行randomize number。注意,要得到相同的序列,兩次randomize後面的number必須相同。

這種方法用途之一就是用於加密和解密。

為了生成某個範圍內的隨機整數,可使用以下公式:

int((upperbound - lowerbound + 1) * rnd + lowerbound)

這裡,upperbound 是隨機數範圍的上限,而 lowerbound 則是隨機數範圍的下限。

注意:若想得到重複的隨機數序列,在使用具有數值引數的 randomize 之前直接呼叫具有負引數值的 rnd。使用具有同樣 number 值的 randomize 是不會得到重複的隨機數序列的。

2、無重複隨機數演算法一

這是最簡單的演算法,每產生一個隨機數,就和已有的比較,如果已經存在,則重新產生。比較適合從一個大範圍裡面抽出一小部分資料,比如,從題庫中抽取試題。

[vb] view plain copy print?

' 產生20個1-100之間的不重複隨機數

public sub rndnumbernorepeat1()

dim rndnumber, temp(20), i, k, maxrec as integer

randomize (timer) '初始化隨機數生成器

maxrec = 100

' 從a21開始輸出隨機數

k = 0

do while k < 20

rndnumber = int(maxrec * rnd) + 1

temp(k) = rndnumber

cells(k + 21, 1) = rndnumber

for i = 0 to k - 1

if temp(i) = rndnumber then exit for

next i

if i = k then k = i + 1

'msgbox "隨機數:" & rndnumber

loop

end sub

3、無重複隨機數演算法二

這個演算法比較巧妙,需要細細體會,才能知道真諦。這個演算法不會重複產生隨機數,但需要一個佔位陣列。比較適合輸出範圍之內所有數值的場合,比如,隨機發牌。

[vb] view plain copy print?

' 產生20個1-100之間的不重複隨機數

sub rndnumbernorepeat2()

dim rndnumber, temparray(99), i as integer

randomize (timer) '初始化隨機數生成器

for i = 0 to 99 '產生包含1-100的不重複的隨機數列

temparray(i) = i

next i

for i = 99 to 80 step -1

rndnumber = int(i * rnd)

'從a21開始輸出這些數字

cells(120 - i, 1) = temparray(rndnumber) + 1

temparray(rndnumber) = temparray(i)

next i

end sub

4、無重複隨機數演算法三

這個演算法使用字典物件完成去重複,和第一個演算法差不多,但程式看上去簡潔一點,嗯,起碼新穎一點。

[vb] view plain copy print?

' 產生20個1-100之間的不重複隨機數

sub rndnumbernorepeat3()

dim d as object 'new dictionary

dim s as integer

randomize (timer) '初始化隨機數生成器

set d = createobject("scripting.dictionary")

do until d.count = 20

s = int(rnd * 100 + 1)

d(s) = ""

loop

end sub

附:vba中dictionary物件使用小結

dim dict

' 建立dictionary

set dict = createobject("scripting.dictionary")

' 增加專案

dict.add "a", 300

dict.add "b", 400

dict.add "c", 500

' 統計專案數

n = dict.count

' 刪除專案

dict.remove ("a")

' 判斷字典中是否包含關鍵字

dict.exists ("b")

' 取關鍵字對應的值,注意在使用前需要判斷是否存在key,否則dict中會多出一條記錄

value = dict.item("b")

' 修改關鍵字對應的值,如不存在則建立新的專案

dict.item("b") = 1000

dict.item("d") = 800

' 對字典進行迴圈

k = dict.keys

v = dict.items

for i = 0 to dict.count - 1

key = k(i)

value = v(i)

msgbox key & value

next

' 刪除所有專案

dict.removeall

例項:sub 巨集1()

set dic = createobject("scripting.dictionary") '字典

for i = 1 to 10000

if not i like "*4*" then

dic.add i, "" '如果不包含「1」

end if

next

end sub

又 tranpose工作表函式的用法例項

'把一行多列的二維陣列轉換成一維陣列

sub test()

dim arr, arrt

arr = range("a1:j1")

arrt = worksheetfunction.transpose(worksheetfunction.transpose(arr))

stop

end sub

首先看看transpose函式的基礎用法。官方幫助說明,transpose函式可返回轉置單元格區域,即將行單元格區域轉置成列單元格區域,反之亦然。

transpose函式語法是:transpose(array)

array引數是需要進行轉置的陣列或工作表上的單元格區域。所謂陣列的轉置就是,將陣列的第一行作為新陣列的第一列,陣列的第二行作為新陣列的第二列,以此類推

2樓:匿名使用者

dim b as integer

dim d as integer

b = rnd() * 900 + 100d=strreverse(b)

在vb中,如何編寫程式通過隨機函式產生10~99之間的隨機整數?

3樓:匿名使用者

vb 產生隨機數的公式(上界-下界+1)*rnd+下界你的題目就應該是(99-10+1)*rnd +10一般用rnd的時候還要在前面加一條 randomize 初始化隨機種 子

4樓:匿名使用者

randomize time '初始化

print int(rnd * 90) + 10 '產生隨機數,並輸出

5樓:匿名使用者

private sub form_click()randomize

for i = 10 to 99

n = int(rnd * i + 10)next

print nend sub

6樓:匿名使用者

dim tmp as byte randomize timer ' 隨機種子 tmp=int(rnd * 90+10) msgbox tmp ' 輸出隨機數

設計程式vb隨機產生10到100之間(包括10和

private sub command1 click on error resume next dim a 5 as integer randomize int upperbound lowerbound 1 rnd lowerbound for i 0 to 3 b c 0 for j 1 to ...

C語言一維陣列程式設計隨機產生100200之間的隨機整

include include include define n 10 int main void for i 0 i 一 建立一個10個元素的int陣列,1 隨機賦值 100以內的整數 2 按降序排序 3 輸出排序後的陣列元素 30 include include include int main...

用vc語言程式設計實現,用VC語言程式設計實現216進位制內任意進位制之間的轉換。謝謝大神。

include include include int readnumber char input,int base if base 2 base 16 int number 0 for int i 0 i inputlength i else if c a c f else if c a c f ...