В java программе как я могу найти все названия продуктов всех возможных комбинаций сумма всех значений продукта которых равна k
предположим, что существует 20 продуктов и их значения равны a =12; b=10; c=10; d=8; e=9,5; f=9; g=8; h=11 и т. д..
теперь я хочу напечатать название 9 элементов, которые будут выбраны из двадцати элементов, общая сумма значений которых меньше 100.
я использовал простой код получения комбинации всех чисел, точная сумма которых равна 50.
пожалуйста, скажите мне, какую модификацию я должен внести в код, чтобы получить вышеуказанное решение.
Что я уже пробовал:
import java.util.ArrayList; import java.util.Arrays; public class SumCombinations { static void sum_combinations_recursive(ArrayList<integer> inputNumbers, int targetSum, ArrayList<integer> partialNumbers) { int sum = 0; //calculate summation of partial numbers for (int x: partialNumbers) { sum += x; } if (sum == targetSum) System.out.println("sum("+Arrays.toString(partialNumbers.toArray())+")="+targetSum); if (sum >= targetSum){ return; } //add the remaining numbers in the partial number list for(int i=0;i<inputnumbers.size();i++) {="" ="" arraylist<integer=""> remainingNumbers = new ArrayList<integer>(); int n = inputNumbers.get(i); for (int j=i+1; j<inputnumbers.size();j++) { ="" ="" remainingnumbers.add(inputnumbers.get(j)); ="" } ="" arraylist<integer=""> partialNumbersList = new ArrayList<integer>(partialNumbers); partialNumbersList.add(n); sum_combinations_recursive(remainingNumbers,targetSum,partialNumbersList); } } static void sum_combinations(ArrayList<integer> inputNumbers, int targetSum) { sum_combinations_recursive(inputNumbers,targetSum,new ArrayList<integer>()); } public static void main(String args[]) { Integer[] inputNumbers = {1,2,3,4,10,15,20,35,50,100}; int targetSum = 50; sum_combinations(new ArrayList<integer>(Arrays.asList(inputNumbers)),targetSum); } }