Mô tả vấn đề
Giả sử có n người xếp hàng, phân phối chuối như sau:
- Người 1 nhận 1, người 2 nhận 2, ..., người n nhận n.
- Quay lại đầu hàng: người 1 nhận n+1, người 2 nhận n+2, ..., người n nhận 2n.
- Lặp lại (mỗi lần cho nhiều hơn 1 quả, quay đầu hàng khi hết) cho đến khi hết chuối. Người cuối nhận tất cả chuối còn lại.
Viết hàm nhận số người num và số chuối m, trả về mảng (độ dài num, tổng m) biểu thị phân phối cuối cùng.
Ví dụ, nếu đầu vào là:
const num = 3; const m = 10;
Thì đầu ra nên là:
const output = [5, 2, 3];
Giải thích đầu ra
Lượt 1: res[0] += 1 → [1,0,0]. Lượt 2: res[1] += 2 → [1,2,0]. Lượt 3: res[2] += 3 → [1,2,3]. Lượt 4: res[0] += 4 → [5,2,3].
Ví dụ minh họa
Mã thực hiện (mô phỏng):
const num = 3;
const m = 10;
const distributeBananas = (num = 1, m = 1) => {
const res = new Array(num).fill(0);
let curr = 1;
while(true){
for(let i = 0; i < num; i++){
if(m < curr){
res[i] += m;
return res;
};
res[i] += curr;
m -= curr;
curr++;
};
};
};
console.log(distributeBananas(num, m));Đầu ra
Kết quả trong console sẽ là:
[5, 2, 3]