Chọn giá trị ngẫu nhiên và sau đó ném đi những người mà bạn đã sử dụng là một xấu ý tưởng . Nó làm cho thời gian chạy lâu hơn khi số lượng các số có sẵn ít hơn vì bạn đang ném đi nhiều hơn và nhiều hơn nữa.
Những gì bạn muốn là một danh sách ngẫu nhiên mà tôi sẽ thực hiện với đoạn mã sau (pseudo-code từ bài tập về nhà của nó):
dim n[10] // gives n[0] through n[9]
for each i in 0..9:
n[i] = i // initialize them to their indexes
nsize = 10 // starting pool size
do 10 times:
i = rnd(nsize) // give a number between 0 and nsize-1
print n[i]
nsize = nsize - 1 // these two lines effectively remove the used number
n[i] = n[nsize]
Bằng cách chọn một số ngẫu nhiên từ hồ bơi sau đó thay thế nó bằng đầu số từ hồ bơi đó và giảm kích thước của hồ bơi, bạn nhận được một shuffle mà không cần phải lo lắng về một số lượng lớn các hoán đổi lên phía trước. Điều này là quan trọng nếu số lượng cao ở chỗ nó không giới thiệu một sự chậm trễ khởi động không cần thiết.
Ví dụ, kiểm tra băng ghế dự bị kiểm tra như sau:
<--------- n[x] ---------->
for x = 0 1 2 3 4 5 6 7 8 9 nsize rnd(nsize) output
--------------------------- ----- ---------- ------
0 1 2 3 4 5 6 7 8 9 10 4 4
0 1 2 3 9 5 6 7 8 9 7 7
0 1 2 3 9 5 6 8 8 2 2
0 1 8 3 9 5 6 7 6 6
0 1 8 3 9 5 6 0 0
5 1 8 3 9 5 2 8
5 1 9 3 4 1 1
5 3 9 3 0 5
9 3 2 1 3
9 1 0 9
Bạn có thể xem hồ giảm khi bạn đi và, bởi vì bạn luôn thay thế sử dụng một với một ai không sử dụng, bạn sẽ không bao giờ có lặp lại.
Và tại bài tập ở nhà của bạn bao gồm biến đó vào VB :-)
Và, vì bài tập về nhà này bây giờ là gần như chắc chắn quá hạn (khoảng một năm trước), tôi sẽ đăng một giải pháp VBA cho thấy làm thế nào để làm điều đó, cho đầy đủ.
Option Explicit
Option Base 0
Sub Macro1()
Randomize
Dim list(10) As Integer
Dim i As Integer
Dim size As Integer
Dim pos As Integer
Dim result As String
For i = 0 To 9
list(i) = i
Next
size = 10
result = ":"
For i = 1 To 10
pos = Int(Rnd() * size)
result = result & list(pos) & ":"
size = size - 1
list(pos) = list(size)
Next
MsgBox result
End Sub
này tạo ra, trên ba chạy riêng biệt:
:5:7:4:2:9:1:0:8:3:6:
:3:9:6:0:7:8:5:4:2:1:
:7:6:3:5:1:8:9:0:4:2:
vui lòng làm ơn RTFM - (nói cách khác, bạn đã thử những gì cho đến nay, v.v., v.v.). Chúng tôi không chỉ làm bài tập ở nhà của bạn cho bạn: ( – KevinDTimm
làm cách nào để đăng mã của tôi ở đây? – gibz357
Khi bạn chỉnh sửa câu hỏi của mình - nhìn sang bên phải: 'Cách định dạng': • mã thụt lề bằng 4 dấu cách – tanascius