JavaScript Exercise: Function (Bài tập 5-Tạo số ngẫu nhiên trong khoảng)

Write function javascript generate a random whole number integer between two specified variables, e.g. x = 4 and y = 8 would output any of 4, 5, 6, 7, 8

Bạn hãy viết một function javascript để sinh ra một số nguyên bất kì trong một khoảng cho trước.
Ví dụ: Hãy in ra một số nguyên x bất kì trong khoảng 4 <= x <= 8. Như vậy số x phải là 1 trong những số này: 4,5,6,7,8

Như mọi lần tôi sẽ đưa ra ý tưởng giải quyết chung cho bài toán, cách giải này sẽ giúp ta chuyển sang viết code để giải quyết. Vì thế cách giải này có thể dùng bất kì ngôn ngữ nào để viết tương tự giả quyết bài toán này. Ở đây, tôi đang viết các bài tập cho javascript nên tôi sẽ viết code javascript.

Tôi trình bày một ví dụ tổng quát hơn như sau: Chú ý dấu ( ) ngoại trừ số giới hạn và [ ] bao gồm cả số giới hạn như toán cấp III bạn đã học trong đại số.
– Một số bất kì trong khoảng [min, max]
– Khoảng cách giữa 2 số trên là max-min (gọi tắt là r)
– Ta sẽ thấy các số bất kỳ x sinh ra phải min <= x <= max
– Ta thấy khoảng cách 2 số trên (tức là r) mà cộng với min thì chính là số x nằm trong khoảng [min, max] đó
– Như vậy là min <= r + min <= max (chính là min <= (max-min)+min <= max)
– Bạn biết hàm Math.random() trong js chứ? Đó là hàm sinh ra sỗ ngẫu nhiên trong khoảng (0, 1). Nó là số double nên nó ở dạng như 0.2353453453535
– Nếu (max-min)*Math.random() thì cho ta kết quả trong khoảng 0 < (max-min)*Math.random() < (max-min).
– Vậy ta cộng min vào biểu thức so sánh trên thì có biểu thức mới như sau:

0 + min &lt; (max-min)*Math.random() + min &lt; (max-min) + min
// Rút gọn lại
min &lt; (max-min)*Math.random() + min &lt; max

– Biểu thức trên kết quả sinh ra số luôn trong khoảng min;max ta cần nhưng lại không bao gồm min và max. Nên ta sẽ phải dùng hàm làm tròn Math.floor() là hàm làm tròn xuống
– Xem lại với 0 < (max-min)*Math.random() < (max-min). Vì Math.random() luôn là số 0.xxxxxxx nên nên (max-min)*Math.random() luôn có kết quả nhỏ hơn (max-min). Nếu ta sửa lại (max-min+1)*Math.random() < (max-min)+1 tức là (max-min)*Math.random() + 1*Math.random() luôn lớn hơn max-min là 0.xxxxxxxx, dùng làm tròn xuống thì kết quả cuối cùng 0 <= Math.floor((max-min+1)*Math.random()) <= max-min
– Như vậy, ta có kết quả cuối cùng min <= Math.floor((max-min+1)*Math.random())+min <= max

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

Xem thêm tại:
1. Mozilla Developer Network
2. Generating random whole numbers in JavaScript

Rate this:

Share this:

Like this:

Like

Loading…