Показать сообщение отдельно
  #3 (permalink)  
Старый 16.05.2022, 00:37
Интересующийся
Отправить личное сообщение для pingu Посмотреть профиль Найти все сообщения от pingu
 
Регистрация: 31.08.2021
Сообщений: 15

Сообщение от рони Посмотреть сообщение
pingu,
let A = [15.8, 1.2, 1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.6, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5];
let K = 2;


let arr = Combination(A, K);
function Combination(A, K) {
	A.sort((a, b) => a - b);
	let local = [], arr = [], pr = [];
	unique_combination(0, 0, K, local, A, pr, arr);
    return arr

}

function unique_combination(l, sum, K, local, A, pr, arr) {
	if (sum == K) {
		pr = local;
		//console.log("pr",pr);
        arr.push(pr.slice(0));
	}

	for (let i = l; i < A.length; i++) {
		if (sum + A[i] > K)
		continue;
		if (i > l && A[i] == A[i - 1])
		continue;
		local.push(A[i]);
		unique_combination(i + 1, sum + A[i], K, local, A, pr, arr);
		local.pop();
	}
}
console.log("arr",arr);
И как всегда вы ГУРУ ,и как всегда идеал,но ещё одна проблема не решена,как упорядочить все элементы в массивах комбинаций от большего к меньшему перед записью в финальный массив,должно быть так
pr (4)[0.5, 0.5, 0.5, 0.5]//верно
pr (3)[1, 0.5, 0.5]//верно
pr (3)[0.9, 0.6, 1]//не верно!!!!!!!
pr (3)[0.8, 0.7, 0.9]//не верно!!!!!!!
pr (3)[0.8, 0.6, 0.6]//верно
pr (2)[1.2, 0.8]//верно
pr (2)[1.1, 0.9]//верно

3 и 4 комбинации не корректны в моём случае?Должно же быть так
pr (3)[0.9, 0.6, 1]//не верно!!!!!!! => [1, 0.9, 0.6]
pr (3)[0.8, 0.7, 0.9]//не верно!!!!!!!=>[0.9, 0.8, 0.7]
Как это исправить перед записью в массив?Спасибо!
Ответить с цитированием