Chúng ta cần viết một hàm JavaScript nhận một số làm đầu vào đầu tiên và một số tối đa làm đầu vào thứ hai.
Hàm sẽ tạo ra bốn số ngẫu nhiên, mà khi cộng lại sẽ bằng số được cung cấp cho hàm làm đầu vào đầu tiên và không một trong bốn số đó vượt quá số cho làm đầu vào thứ hai.
Ví dụ – Nếu các đối số của hàm là:
const n = 10; const max = 4;
Thì,
const output = [3, 2, 3, 2];
là một tổ hợp hợp lệ.
Lưu ý rằng sự lặp lại của các số là được phép.
Ví dụ
Mã thực hiện:
const total = 10;
const max = 4;
const fillWithRandom = (max, total, len = 4) => {
let arr = new Array(len);
let sum = 0;
do {
for (let i = 0; i < len; i++) {
arr[i] = Math.random();
}
sum = arr.reduce((acc, val) => acc + val, 0);
const scale = (total - len) / sum;
arr = arr.map(val => Math.min(max, Math.round(val * scale) + 1));
sum = arr.reduce((acc, val) => acc + val, 0);
} while (sum - total);
return arr;
};
console.log(fillWithRandom(max, total));
Kết quả
Kết quả trong console:
[ 3, 3, 2, 2 ]
Đầu ra dự kiến sẽ khác nhau ở mỗi lần chạy.