Mi sto grattando la testa cercando di fare questo e mi sta divorando. So che non è così complesso. Ho un numero di elementi, questo numero può essere uguale o maggiore di tre. Quindi ho bisogno di determinare la possibile combinazione di un gruppo di elementi che completerà il totale. L'unica limitazione è che i gruppi dovrebbero avere tre o più elementi, non eccedere (ma includere) sette elementi.Algoritmo per determinare possibili gruppi di articoli
Ad esempio:
Se Ho 7 elementi, quindi ho potuto avere queste possibili gruppi:
- 1 gruppo di 7 elementi.
- 1 gruppo di 4 articoli e 1 gruppo di 3 articoli.
Se ho 12 articoli, ho potuto avere questi possibili gruppi:
- 4 gruppi di 3 elementi.
- 3 gruppi di 4 articoli.
- 2 gruppi di 6 articoli.
- 1 gruppo di 7 articoli + 1 gruppo di 5 articoli.
- 2 gruppi di 3 e 1 gruppo di 6 articoli.
- 1 gruppo di 3, 1 gruppo di 4 e 1 gruppo di cinque articoli.
- ...
ho pensato di ricorsione e iniziato ad attuare l'algoritmo. Ovviamente non funziona. Faccio schifo alla ricorsione. Un sacco.
//Instance Fields
public List<ArrayList<String>> options;
//Method that will generate the options. The different options are
//stored in a list of "option". An individual option will store a list of
//strings with the individual groups.
public void generateOptions(int items, ArrayList<String> currentOption){
//If the current option is null, then create a new option.
if(currentOption == null){
currentOption = new ArrayList<String>();
}
if(items < 3){
//If the number of items is less than three then it doesn't comply with the
//requirements (teams should be more or equal than three.
currentOption.add("1 group of "+items+" items");
options.add(currentOption);
}
else{
//I can make groups of 3,4,5,6 and 7 items.
for(int i = 3;i<=7;i++){
if(items%i == 0){
// If the number of items is divisible per the current number,
// then a possible option could be items/i groups of i items.
// Example: Items = 9. A possible option is 3 groups of 3 items.
currentOption.add(items/i +" groups of "+ i+" items");
options.add(currentOption);
}
else{
// If the number of items - the current number is equal or greater than
// three, then a possible option could be a group of i items
// and then I'll have items-i items to separate in other groups.
if(items - i >=3){
currentOption.add("1 group of "+i+" items");
generateOptions(items-i,currentOption);
}
}
}
}
}
Grazie per il vostro aiuto !!!
Questo è molto vicino a quello che sto cercando. Sto cercando di convertirlo in Java per vedere come funziona. Grazie. – miguelrios