Bài tập
Cho một số nguyên dương n
nhỏ hơn 2^30
chỉ định làm đầu vào theo bất kỳ cách nào bạn chọn, mã của bạn sẽ xuất ra một số nguyên ngẫu nhiên giữa 0
và n
, bao gồm. Số lượng bạn tạo nên được chọn thống nhất ngẫu nhiên . Đó là mỗi giá trị từ 0
để n
phải xảy ra với xác suất như nhau (xem Nội quy và Hãy cẩn thận).
Quy tắc và hãy cẩn thận
Mã của bạn có thể giả định rằng bất kỳ trình tạo số ngẫu nhiên nào được tích hợp vào ngôn ngữ hoặc thư viện tiêu chuẩn của bạn tuyên bố là ngẫu nhiên thống nhất trên thực tế là thống nhất. Đó là bạn không phải lo lắng về chất lượng của nguồn ngẫu nhiên bạn đang sử dụng. Tuy nhiên,
- Bạn phải thiết lập rằng nếu nguồn ngẫu nhiên bạn đang sử dụng là đồng nhất thì mã của bạn sẽ đưa ra một số nguyên ngẫu nhiên thống nhất từ
0
đếnn
. - Bất kỳ đối số khi gọi một hàm ngẫu nhiên tích hợp hoặc thư viện phải là hằng số. Đó là chúng phải hoàn toàn độc lập với giá trị đầu vào.
- Mã của bạn có thể chấm dứt với xác suất 1 thay vì được đảm bảo chấm dứt.
Ghi chú
randInt(0,n)
không hợp lệ vì nó lấy đầu vào làm đối số cho hàm dựng sẵn hoặc hàm thư viện.rand()%n
sẽ không đưa ra một số ngẫu nhiên thống nhất nói chung. Như một ví dụ được đưa ra bởi betseg, nếuintmax == 15
vàn = 10
, sau đó bạn sẽ có nhiều khả năng nhận được0-5
hơn6-10
.floor(randomfloat()*(n+1))
nói chung cũng sẽ không đưa ra một số ngẫu nhiên thống nhất do số hữu hạn của các giá trị dấu phẩy động khác nhau có thể có từ 0 đến 1.
rng()
cung cấp0
-100
, nếun = 75
và chức năng làrng()%75
, thì 0-25 sẽ phổ biến hơn ...)