Cho mảng số: const numbers = [10,6200,20,20,350,900,26,78,888,10000,78,15000,200,1280,2000,450];
Viết hàm nhận mảng và số x trong [0,100] (phần trăm). Trả về mảng con n phần tử đầu cộng lại <= x% tổng mảng.
Ví dụ đơn giản: [12,10,6,8,4,2,8] tổng=50. x=25 => ngưỡng=12.5 => chỉ lấy [12] vì +10 sẽ vượt.
Code: reduce tính tổng, for loop xây mảng kết quả cho đến khi vượt ngưỡng.
Ví dụ
const numbers = [10,6200,20,20,350,900,26,78,888,10000,78,15000,200,1280,2000,450];
const findPercent = (arr, percent) => {
const sum = arr.reduce((acc, val) => acc + val);
const part = [];
let curr = 0;
for (let i = 0; i < arr.length; i++) {
curr += arr[i];
if (curr <= (sum * percent) / 100) {
part.push(arr[i]);
} else {
break;
}
}
return part;
};
console.log(findPercent(numbers, 35));
console.log(findPercent(numbers, 5));
console.log(findPercent(numbers, 65));
console.log(findPercent(numbers, 95));Kết quả
Đầu ra trong console sẽ là:
[
10, 6200, 20, 20,
350, 900, 26, 78,
888
]
[ 10 ]
[
10, 6200, 20,
20, 350, 900,
26, 78, 888,
10000, 78
]
[
10, 6200, 20, 20,
350, 900, 26, 78,
888, 10000, 78, 15000,
200, 1280
]