Possibili combinazioni di carte: QUALI sono?

AndyOne1
Ciao ragazzi, mi trovo davanti ad un problema. Ho un mazzo di 44 carte e devo calcolare quante sono le possibili terzine e soprattutto quali sono.

Mi sono calcolato il numero di possibili combinazioni da 3 carte avendone 44 in questo modo:
$ (44!) / [(44-3)! * 3!] = 13244 $ combinazioni possibili

Ora però vorrei capire come fare a calcolare QUALI sono queste combinazioni, c'è un algoritmo con cui procedere per essere certo di non dimenticarne nessuna? Grazie in anticipo per le risposte.

Risposte
superpippone
Assodato che $13.244$ sono le terzine possibili, cosa vuol dire QUALI sono?
Devi elencarle tutte?
O intendi qualcos'altro?

AndyOne1
"superpippone":
Assodato che $13.244$ sono le terzine possibili, cosa vuol dire QUALI sono?
Devi elencarle tutte?
O intendi qualcos'altro?


Devo proprio elencarle tutte, l'ordine non è rilevante. Ad esempio io ho un mazzo da 44 carte:
Asso di fiori, due di fiori e tre di fiori è uguale a due di fiori, tre di fiori, asso di fiori

Dovrei calcolare precisamente tutte le combinazioni possibili e stavo ragionando su un algoritmo che mi aiuti
Ad esempio se ho 2 terzine:

terzina 1 : 2, 3 e 4
terzina 2 : 5, 6 e 7

queste sono già due combinazioni, in più avrò:
combinazione 3 : 2, 3 e 5
combinazione 4 : 2, 5 e 3
combinazione 5 : 5, 2 e 3
ecc.

superpippone
Non ci siamo mica....
Cosa vuol dire terzina 2,3,4?
2 di fiori, 3 di fiori, 4 di fiori?
2 di picche, 3 di quadri, 4 di cuori?
In ogni caso, secondo me, ti conviene numerare le carte da 1 a 44.
Ad esempio i cuori 1-11; i quadri 12-22; i fiori 23-33; le picche 34-44.
Mi sembra molto più semplice.
Certo che scrivere tutte le $13.244$ terzine......

axpgn
"superpippone":
... Certo che scrivere tutte le $13.244$ terzine......

Lo sai che esistono i pc? :D

Basta un semplice for ...

for a = 1 to 13242
for b = a+1 to 13243
for c = b+1 to 13244

print a, b, c

next c
next b
next a


Cordialmente, Alex

DajeForte
Occhio che gli estremi superiori dei for sono sbagliati.
Comunque quella è una procedura.

axpgn
Sì, ho esagerato :-D

Modifichiamo ...

for a = 1 to 42
for b = a+1 to 43
for c = b+1 to 44

print a, b, c

next c
next b
next a

AndyOne1
esatto, ovviamente devo fare un programma che implementa un algoritmo che mi calcola tutte le combinazioni di carte
intanto grazie a tutti per le risposte, riguardo il codice postato da axpgn, avevo fatto una cosa simile, ora il mio problema è adattarlo al mio caso specifico:

supponiamo di avere un array di dimensione 44, nell'indice 0 c'è la prima carta del mazzo e così via fino all'indice 43
poichè sto programmando in Java ho un oggetto array (mazzo) di oggetti Carta (ogni carta ha un valore e un seme)

quello che voglio fare è salvare le terzine una per volta dentro un altro array, di 3 elementi: salvo la prima combinazione di 3 elementi, eseguo dei calcoli e passo alla combinazione seguente

a questo punto quello che mi sfugge è come gestire gli indici a, b e c all'interno dell'array, esempio (terzina è un array di oggetti Carta)

int i = 0

for a = 1 to 42
for b = a+1 to 43
for c = b+1 to 44

terzina = mazzo[a]
terzina[i+1] = mazzo
terzina[i+2] = mazzo[c]

eseguo i calcoli vari...

i++

next c
next b
next a

sarebbe corretto così?

axpgn
Premesso che dovresti spostare il problema nella sezione di informatica, quella "terzina" che hai scritto non è un array, o meglio è un array ma ad una colonna sola e non credo che sia quello che avevi in mente tu; inoltre così facendo riscrivi sopra quello che hai già scritto.

Ti basta un array bidimensionale, più o meno così ...

dim T(13244,3)

i = 0

for a = 1 to 42
for b = a+1 to 43
for c = b+1 to 44

T(i,0)=a
T(i,1)=b
T(i,2)=c

i++

next c
next b
next a

più o meno ... :D

Cordialmente, Alex

AndyOne1
"axpgn":
Premesso che dovresti spostare il problema nella sezione di informatica, quella "terzina" che hai scritto non è un array, o meglio è un array ma ad una colonna sola e non credo che sia quello che avevi in mente tu; inoltre così facendo riscrivi sopra quello che hai già scritto.

Ti basta un array bidimensionale, più o meno così ...

dim T(13244,3)

i = 0

for a = 1 to 42
for b = a+1 to 43
for c = b+1 to 44

T(i,0)=a
T(i,1)=b
T(i,2)=c

i++

next c
next b
next a

più o meno ... :D

Cordialmente, Alex


sì scusami, hai ragione
adesso faccio un paio di prove e vi farò sapere, magari mi sposto nell'altra sezione! grazie ancora per la pazienza e per le risposte, buona serata!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.