Nếu xem vấn đề này bằng cái nhìn hồn nhiên

, thì đây là một bài toàn tương đối phổ biến khi lập trình giả lập. Chẳng hạn tôi giả lập dữ liệu điểm thi quanh điểm trung bình nhằm tạo dữ liệu chạy thử phần mềm tuyển sinh...
Bài này ngoài ý niệm về ngẫu nhiên, thì chỉ cần nắm vững kiến thức toán cấp 1 là đủ để giải quyết.
Nguyên lý cũng khá đơn giản. Gọi dãy muốn tạo là dãy số kỳ vọng có chiều dài n (H1, H2...., Hn) với giá trị trung bình là TB:
Bước 1: Cứ thản nhiên tạo ra n số ngẫu nhiên (X1, X2,... Xn)
Bước 2: Tính tỷ số giữa tổng các số kỳ vọng với tổng các số vừa tạo : (TB*n)/(X1+X2+...+Xn).
Bước 3: Nhân từng số trong dãy ngẫu nhiên này với tỷ số trên sẽ ra từng số của dãy số kỳ vọng.
Minh họa 1 ví dụ như sau:
Giả sử số trung bình của tôi là 5, độ dài dãy số quanh (5) đó là 4.
B1: Tôi tạo ra 4 số ngẫu nhiên: 8, 4, 16, 12; có tổng là 8+4+16+12=40
B2: Tỷ số giữa tổng dãy số kỳ vọng 5*4 = 20 với tổng các số ngẫu nhiênsẽ là 20/40 = 0.5
B3: Nhân lần lượt mỗi số trong dãy ngẫu nhiên với tỷ số 0.5 thì ra từng số trong dãy kỳ vọng.
8*0.5, 4*0.5, 16*0.5, 12*0.5 tương đương (4, 2, 8, 6)
Bình quân của dãy (4, 2, 8, 6) có phải bằng 5 không? Quá đơn giản phải không quý vị? Cũng nói luôn là trong giả lập dữ liệu còn nhiều ràng buộc khác nữa (ngoài con số trung bình ở trên) nhưng trình độ có hạn nên xin phép không lan man ạ.