sndp.19793 Ответов: 1

В 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);
 
	    }
 
}

1 Ответов

Рейтинг:
1

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

Все, что вы сделали до сих пор, это нашли какой-то код комбинации: вы не ссылаетесь на продукты, или их названия, или ... ну ничего особенного.

Это ваше домашнее задание: оно существует не просто так - чтобы позволить вам упражняться в том, чему вы должны научиться, и научить вас "как правильно думать". Просто находя код и надеясь, что кто-то сделает его подходящим для вашего точного домашнего задания, вы этого не сделаете.
Попробуйте: на самом деле это не так уж сложно.