View Full Version : [Q] Xin hỏi một chút về random
Xin hỏi các huynh làm thế nào để dùng random mà không bị lặp lại
Dùng Randomize trước khi sử dụng hàm Rnd() thì có thể tránh được lặp lại.
Cú pháp
'.... code
Randomize
'.... code
x=Rnd()
'... code
Lighting_dragon
11-06-2003, 23:05
Bị lập lại là sao ?
Lập lại những số đã có rồi hay là thế nào.
gamehacker
12-06-2003, 13:19
Viết 1 hàm random riêng đi
Public Function Random(Min as Integer,Max as Integer) As Integer
'Khởi tạo Random
Randomize
Random = Min + (Max - Min) * Rnd
End Function
Bảo đảm hàm này rất tuyệt !
To Lighting_dragon.
Khi dùng hàm Rnd ở VB (cũng như ở các ngôn ngữ khác) thì xảy ra hiện tượng lặp lại. Tức là lần chạy chương trình trước hàm Rdn cho bạn 3 số ví dụ là x,y,z thì lần chạy sau nó cũng sẽ ra x,y,z
Tuy nhiên đó chỉ là do chúng ta quên thôi, nếu sử dụng hàm Randomize trước thì sẽ không bao giờ lặp lại (trên lý thuyết thì có nhưng thực tế chắc không đâu :D).
White_Rose
13-06-2003, 02:04
Khi dùng hàm Rnd ở VB (cũng như ở các ngôn ngữ khácKhông phải ngôn nào cũng vậy đâu :-) đây là code trong vb.net (không dùng nen không rõ cú pháp có chuẩn không :D)
Dim r As Random = New Random()
intNumber = r.Next()
dblNumber = r.Next
dblNumber = r.Sample() '0 -> 1
em đã dùng
randomize
x=int((5*rnd)+1) 'Lap trong khoang 1 den 5
thì x=3 lặp lại hai ba lần
trungnt88
16-06-2003, 18:57
dim a,b,c,h,kq as single
randomize
h=rnd*10
randomize
a=rnd*h
randomize
b=rnd*a*h
randomize
c=rnd*a*b*h
randomize
kq=rnd*a*b*c
'kq la` 1 so khong bao gio trung lap
Bài viết được gửi bởi simon
Xin hỏi các huynh làm thế nào để dùng random mà không bị lặp lại
to simon: muốn random không lặp lại thì làm như sau:
Ta dùng 2 mảng, mảng thứ nhất chứa kết quả tìm được, mảng thứ 2 là mảng đánh dấu các phần tử đã được chọn:
dim aTest(1 to 10) as boolean
dim aNum(1 to 10) as integer
call randomize
for i=1 to 10
aTest(i)=false
next
for i=1 to 10
do
aNum(i)=int(rnd*10+1)
loop until aTest(aNum(i))=false
aTest(aNum(i))=true
next
p/s: cái này đánh tay chứ chưa test, không biết đúng hay sai. lol
Ah, random thì lặp lại là chuyện ko có gì lạ, vấn đề là lặp lại thành chu kỳ thui. Gọi randomize là khởi tạo lại seed bằng cách lấy giờ hệ thống, vậy thì sẽ "ngẫu nhiên" thui mà. Còn mí bạn dùng hàm random kết hợp với nhân chia gì đó thì cũng bằng thừa, có gì khác đâu... hờ hờ
cách của boy_behind_glasses có thể áp dụng cho dãy nhiều số được không?
simon đã dùng 2 listbox và một hàm kiểm tra, kết quả cũng khả quan.
KEM_WALL
17-06-2003, 20:23
Bài viết được gửi bởi trungnt88
dim a,b,c,h,kq as single
randomize
h=rnd*10
randomize
a=rnd*h
randomize
b=rnd*a*h
randomize
c=rnd*a*b*h
randomize
kq=rnd*a*b*c
'kq la` 1 so khong bao gio trung lap
hêy, có cần phải randomize nhiều thế kô, walls nghĩ 1 lần ở đầu là đủ rùi mà
đúng, randomize chỉ một lần là đủ, kêu nhiều cũng thế à...
ban quan tam toi random vui long gui mail cho toi u se nhan dc dap an cuc ky tuyet voi, toi ko the gui luc nay vi dang ban the nhe. my email rulearmy@yahoo.com
Bạn thử như thế này có được không, đảm bảo không tốn nhiều biến bộ nhớ như thế. x=Rnd*Rnd*Rnd*Rnd*......*Rnd*Rnd. Hi hi hi
quatbatieu
20-06-2003, 10:59
mình nhớ có mộ cách tạo số Random bàng cách lấy phần dư của phép chia mà kết quả là một số vô tỉ vô hạn không tuần hoàn, bạn có thể tạo ra phép chia này một cách đơn giãn bằng cách tạo ra một chuỗi các cắp số , sau đó lấy các kết quả thu được cho vào một chuỗi rồi lấy ra theo phần 10, 100, 1000...cách này có ổn không ? hì tại vì vừa viết vừa nghĩ thui, để vè thử coi đã :))
trungnt88
20-06-2003, 19:37
random nhiều cho đỡ lặp lại Nếu lặp lại thì xúi lắm !
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.