Domanda

Ho un mazzo di carte standard e poi ne ho tolte alcune, dalle carte rimanenti voglio calcolare tutte le possibili combinazioni di due carte.Ad esempio con 47 carte ce ne sono 47 scegli 2 combinazioni.Qualcuno può pensare a un modo efficiente per farlo diverso da

foreach(card){
  combinations.add(card, card +1)
}

Grazie

È stato utile?

Soluzione

for(int i=0; i<47; i++) {
  for(int j=i+1; j<47; j++) {
     combinations.add(i, j);
  }
}

Questo è il modo più efficiente, in quanto passa attraverso ciascuna coppia sola volta.

Se si desidera solo il numero di combinazioni di due coppie, vedi qui .

Altri suggerimenti

Su questo sito esistono alcuni algoritmi che risolvono problemi combinatori.Cerca una classe chiamata

class ChoiceIterable<T> implements Iterable<T[]>

Se tutto ciò che serve è solo due sottoinsiemi di carte (al contrario di un numero variabile), si potrebbe facilmente fare questo con due cicli for innestati.

for(i=0;i<cards.length;i++){
   for(j=i+1;j<cards.length;j++){
      combinations.add(cards[i],cards[j]);
   }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top