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

Как записать результаты в массив,я в ступоре.
Доброго времени суток форумчане.Я что то впал в ступор .
Задача такая,нужно найти все уникальные комбинации в массиве , сумма которых равна искомому числу.Это отлично решается этим кодом.Пример ниже:
var 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];
var K = 2;
var pr = [];
Combination(A, K);
function Combination(A, K) {
	A.sort((a, b) => a - b);
	let local = [];
	unique_combination(0, 0, K, local, A);
}
function unique_combination(l, sum, K, local, A) {
	if (sum == K) {
		pr = local;
		console.log("pr",pr);
	}
	
	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);
		local.pop();
	}
}

на выходе получаем уникальные комбинации:
pr (4) [0.5, 0.5, 0.5, 0.5]
pr (3) [0.5, 0.5, 1]
pr (3) [0.5, 0.6, 0.9]
pr (3) [0.5, 0.7, 0.8]
pr (3) [0.6, 0.6, 0.8]
pr (2) [0.8, 1.2]
pr (2) [0.9, 1.1]

и это круто,но задача состоит в том что бы все эти комбинации развернуть в обратном порядке и записать в новый массив,должно выглядеть так на выходе
[[0.5, 0.5, 0.5, 0.5], [1, 0.5, 0.5], [0.9, 0.6, 0.5], [0.8, 0.7, 0.5], [0.8, 0.6, 0.6], [1.2, 0.8], [1.1, 0.9]]
.
Проблема № 1,я пробовал применить
reverse()
к
local
так
pr = local.reverse();
,но к моему глубокому удивлению на выходе получаю вот это :
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]//верно

Проблема № 2,как записать все результаты в новый массив,я пробовал
push,splice()
,но толку 0.В идеале нужен код который соответственно описанного выше примера создаст новую переменную которая будет использоваться далее в которую будет помещён результат
[[0.5, 0.5, 0.5, 0.5], [1, 0.5, 0.5], [0.9, 0.6, 0.5], [0.8, 0.7, 0.5], [0.8, 0.6, 0.6], [1.2, 0.8], [1.1, 0.9]]
,этот результат естественно представлен в виде примера для данных условий .
var A и var K
естественно могут применять и другие значения.
В общем спасите!, почти сутки борюсь,но результатов нет.

Последний раз редактировалось pingu, 15.05.2022 в 23:53. Причина: Ошибка в заголовке
Ответить с цитированием