[HOME - BASE Cinque - Appunti di Matematica ricreativa]

Divisioni di botti

1. Dividere 30 botti in tre parti uguali
Un padre vuole dividere 30 botti di vino in parti uguali fra i suoi 3 figli.
Le 30 botti sono identiche ma 10 di esse sono piene, 10 sono piene a metà e le ultime 10 sono vuote.
I tre figli devono ricevere la stessa quantità di vino e lo stesso numero di botti.
Inoltre le botti non devono essere aperte.
Alcuino di York, 900, Propositio de quodam patrefamilias et tribus filius ejus.

2. Dividere 4 damigiane in 4 parti uguali, con travasi
Quattro damigiane identiche contengono rispettivamente 10, 20, 30, 40 litri di vino. Devono essere suddivise fra 4 persone in modo che ciascuna persona riceva una damigiana e la stessa quantità di vino.
Si deve effettuare il minor numero possibile di travasi.
Alcuino di York, 900, Proposito de vino in vasculis a quodam patre distributo.

3. Dividere 9 damigiane in 3 parti uguali, senza travasi
Si dividano 9 damigiane identiche contenenti rispettivamente 1, 2, 3, 4, 5, 6, 7, 8, 9 litri di vino fra tre persone, senza effettuare travasi, in modo che ciascuna persona riceva 3 damigiane e la stessa quantità di vino.
Quante soluzioni esistono?
Abbot Albert, 1240
Sistemando le soluzioni in colonne si ottiene un quadrato semimagico!

4. Altri esempi di divisioni di recipienti
Nei seguenti esempi utilizzerò la notazione:
(x, y, z) fra n per indicare la suddivisione di x recipienti pieni, y pieni a metà e z vuoti, fra n persone.
Come nei problemi precedenti, ciascuna persona deve ricevere lo stesso numero di recipienti e la stessa quantità di contenuto.

(7, 7, 7) fra 3
Tartaglia. General Trattato, 1556

(9, 9, 9) fra 3
Tartaglia. General Trattato, 1556

(8, 8, 8) among 4
Bachet. Problemes, 2nd ed., 1624.

(5, 8, 11) fra 3

5. Dividere 3n recipienti fra 3 persone
Esiste una soluzione generale per (n, n, n) fra 3?

6. Divisioni di recipienti e triangoli
Si dimostri che il numero di modi in cui è possibile dividere (x, x, x) fra 3 è lo stesso del numero di triangoli di perimetro x.
David Singmaster, 1990

Riporto la versione originale di David Singmaster.
Triangles with integer sides and sharing barrels, 1990.
Shows the number of ways of sharing (N, N, N) among 3 is the same as the number of integer sided triangles of perimeter N. Shows this is the the number of partitions of N/2 or (N-3)/2 into 3 parts.
Finds necessary and sufficient conditions for sharing (a, b, c) among k people.

Un particolare ringraziamento a Roberto Doniez per avermi inviato il seguente problema.

7. Quante soluzioni ha questo problema?
Si devono dividere 45 botti di vino in parti uguali fra 5 persone.
Le botti sono uguali per forma e dimensioni. Il contenuto di vino, invece, è così distribuito:
9 botti piene
9 botti piene per 3/4
9 botti piene a metà
9 botti piene per 1/4
9 botti vuote

Come saranno suddivise fra i 5 persone?

La domanda più interessante è: quante soluzioni ha questo problema?
Kraitchik, Mathematical Recreations, 1942


Risposte & riflessioni

1. Dividere 30 botti in tre parti uguali
Grazie a Gabriele Brosulo per la soluzione.

Basta distribuire, per 5 volte, ai tre fratelli A, B, C:

A: 1 botte piena ed 1 botte vuota.
B: 1 botte piena ed 1 botte vuota.
C: 2 botti mezze piene.

Grazie a Dino e Ivana Niccolai per la soluzione
In questo modo ad ogni "turno" ognuno dei fratelli riceve la stessa quantità di vino e di botti.

Le 10 botti piene e le 10 botti semipiene sono esattamente equivalenti a 30 botti semipiene.
Ogni figlio deve prendere 10 botti semipiene.
Si presentano sei casi possibili, che si equivalgono:
0 botti piene e 10 botti semipiene
1 botte piena e 8 botti semipiene
2 botti piene e 6 botti semipiene
3 botti piene e 4 botti semipiene
4 botti piene e 2 botti semipiene
5 botti piene e 0 botti semipiene

Poiché ogni figlio deve prendere 10 botti (piene, semipiene, oppure vuote) sono possibili cinque modalità di equa suddivisione del vino e delle botti:

Primo modo:
Uno dei tre figli prende: 1 botte piena, 8 botti semipiene e 1 botte vuota
Il secondo figlio prende: 4 botti piene, 2 botti semipiene e 4 botti vuote
Il terzo figlio prende: 5 botti piene, 0 botti semipiene e 5 botti vuote.

Secondo modo:
Uno dei tre figli prende: 2 botti piene, 6 botti semipiene e 2 botti vuote
Il secondo figlio prende: 3 botti piene, 4 botti semipiene e 3 botti vuote
Il terzo figlio prende: 5 botti piene, 0 botti semipiene e 5 botti vuote.

Terzo modo
Uno dei tre figli prende: 3 botti piene, 4 botti semipiene e 3 botti vuote
Il secondo figlio prende: 3 botti piene, 4 botti semipiene e 3 botti vuote
Il terzo figlio prende: 4 botti piene, 2 botti semipiene e 4 botti vuote

Quarto modo
Uno dei tre figli prende: 4 botti piene, 2 botti semipiene e 4 botti vuote
Il secondo figlio prende: 4 botti piene, 2 botti semipiene e 4 botti vuote
Il terzo figlio prende: 2 botti piene, 6 botti semipiene e 2 botti vuote

Quinto modo
Uno dei tre figli prende: 5 botti piene, 0 botti semipiene e 5 botti vuote
Il secondo figlio prende: 5 botti piene, 0 botti semipiene e 5 botti vuote
Il terzo figlio prende: 0 botti piene, 10 botti semipiene e 0 botti vuote.

Per ognuna delle prime due modalità descritte i tre figli possono dividersi le botti in 6 modi diversi
Per ognuna delle ultime tre modalità descritte i tre figli possono dividersi le botti in tre modi diversi

2. Dividere 4 damigiane in 4 parti uguali, con travasi
Grazie a Ivan D. per la soluzione.
Dato che la quantità di vino totale è 100 l allora ognuna delle quattro persone dovrà avere una damigiana con 25 l.
Poichè due damigiane contengono più di 25 l, il numero minimo di travasi è 2: ovvero si devono travasare 15 l da quella da 40 l in quella da 10 l e 5 l da quella di 30 l in quella di 20 l. Così facendo ogni damigiana conterrà 25 l.

3. Dividere 9 damigiane in 3 parti uguali, senza travasi
Grazie a Ivan D. per la soluzione.

Questo gioco in verità è simile a quello famoso del quadrato magico, con qualche vincolo in più.
E' facile dedurre che ogni persona dovrà avere 15l (1+2+3+4+5+6+7+8+9=45; 45/3=15).
E questo ci fa avvicinare al quadrato magico. Però la differenza è che in questo caso i numeri (le damigiane) non possono essere riutilizzati per generare una nuova combinazione. Quindi le possibili soluzioni si riducono a due:
[(9.5.1), (8.4.3), (2.7.6)] e [(9.2.4), (8.1.6), (3.5.7)].
Si dimostra in questo modo.
Considerando un numero qualunque, ad esempio 9, per ottenere 15 in tre numeri con le damigiane disponibili si dovrebbe avere
a) 9+1+5
b) 9+2+4
c) 9+3+3.
L'ultima è da escludere perchè si utilizza due volte 3.
Ora analizziamo i numeri rimasti nei due casi:

caso a) 2-3-4-6-7-8
Consideriamo 8: le possibili somme  che danno 15:
a') 8+1+6
a'') 8+2+5
a''') 8+3+4.
Può esistere solo a''') 8+3+4 poichè nelle altre sono presenti 1 e 5, già utilizzati.
In questo caso la soluzione è [(9.5.1), (8.4.3), (2.7.6)].

caso b)1-3-5-6-7-8
Consideriamo 8: le possibili somme che danno 15:
b') 8+1+6
b'') 8+2+5
b''') 8+3+4
Può esistere solo b') 8+1+6 pochè nelle altre sono presenti 2 e 4 già utilizzati. In questo caso la soluzione è [(9.2.4), (8.1.6), (3.5.7)].  

4. Altri esempi di divisioni di recipienti
Grazie a Ivan D. per la soluzione.

(7, 7, 7) fra 3
(3,1,3), (3,1,3), (1,5,1)

(9, 9, 9) fra 3
(3,3,3), (3,3,3), (3,3,3)

(8, 8, 8) fra 4
(2,2,2), (2,2,2), (2,2,2), (2,2,2)

(5, 8, 11) fra 3
(2,2,4), (2,2,4), (1,4,3)

Roberto Soro Doniez ci invia le tre soluzioni dell'ultimo problema. Le soluzioni sono visualizzate in modo particolarmente efficace utilizzando dei simboli appropriati.

Si devono suddividere 5+8+11 = 24 botti (8 per ciascun figlio)
Si devono suddividere 5*1 + 8*1/2)+ 11*0 = 9 unità di volume (3 per ciascun figlio)

Simboli utilizzati:
(botte piena)
(botte piena a metà)
(botte vuota)
F1, F2, F3 (figlio 1, 2, 3)

La tabella qui sotto illustra come vengono ripartite le botti tra i figli.
Si assegnano dapprima le botti piene, poi quelle piene a metà ed infine quelle vuote.
Le bottiglie piene indicano come completare l'assegnazione.

Prima soluzione
F1 :
F2 :
F3 :

Tipo: 3, 2, 0

Seconda soluzione
F1 :
F2 :
F3 :

Tipo: 3, 1, 1

Terza soluzione
F1 :
F2 :
F3 :

Tipo: 2, 2, 1

5. Dividere 3n recipienti fra 3 persone
Un particolare ringraziamento a Giorgio Tumelero per la sua preziosissima risoluzione.

Se la quantità di liquido è 1 nel recipiente pieno, 1/2 nel recipiente mezzo pieno, zero nel recipiente vuoto, in totale avremo una quantità n + n/2 = 3n/2 di liquido. Dovendo dividerla fra tre persone, allora ognuno riceverà n/2, cioè, chiamando 1, 2, 3 le persone e xi, yi, zi il numero di recipienti rispettivamente pieni, mezzo pieni, vuoti, assegnati alle persone i = 1, 2, 3, abbiamo:
xi + yi/2 + 0*zi = n/2 (per i = 1, 2, 3).
Per semplicità di scrittura moltiplichiamo per 2 ambo i membri, ottenendo:

(1)   2*xi + 1*yi + 0*zi = n   (per i = 1, 2, 3)

Inoltre abbiamo i vincoli:

(v1)    x1 + x2 + x3 = n
(v2)    y1 + y2 + y3 = n
(v3)    z1 + z2 + z3 = n

(vv1)    x1 + y1 + z1 = n
(vv2)    x2 + y2 + z2 = n
(vv3)    x3 + y3 + z3 = n

Supponiamo ora di sapere per un certo valore di i, p. es. i=1, che sia x1=a e y1=b, quanto vale z1?
Dalla (1), sostituendo, abbiamo che
2a + b = n
mentre da (vv1), sostituendo, sappiamo che
n = a + b + z1
ovvero:
2a + b = a + b + z1
2a + b - a - b = z1
z1 = a
Quindi, qualunque siano i valori di xi e yi, sarà sempre zi=xi.
Dalla (1) ricaviamo anche dei limiti superiori e inferiori delle incognite, che sono:

per n pari
max xi = n/2;   min xi = 0
max yi = n;   min yi = 0

per n dispari
max xi = (n-1)/2; min xi = 1
max yi = n-2; min yi = 1

A questo punto, dato n, non resta che trovare tutte le possibili partizioni, più le formule che ci dicono quante sono. Facciamolo con un esempio numerico. Sia n=10, prendiamo x1 = max xi = 5, x2 = max xi = 5, con i quali abbiamo il sistema di equazioni (1):

2*5 + 1*0 + 0*5 = 2*5 + 1*0 + 0*5 = 2*0 + 1*10 + 0*0 = 10

e per i vincoli:

5 +  0  +  5 = 10   (vv1)
+     +     +
5 +  0  +  5 = 10   (vv2)
+     +     +
0 + 10 +  0 = 10   (vv3)
=     =     =
10   10   10

(v1) (v2) (v3)

Per abbreviare, usando le terne (x1, x2, x3), chiamiamo (5, 5, 0) questa prima soluzione. Tenendo fisso x1=5 diminuiamo sempre di uno x2 (e di conseguenza aumentiamo sempre di uno x3, ottenendo in tutto:
(5, 5, 0), (5, 4, 1), (5, 3, 2), (5, 2, 3), (5, 1, 4), (5, 0, 5)
Abbassiamo di uno x1 e ripetiamo il procedimento, otteniamo:
(4, 5, 1), (4, 4, 2), (4, 3, 3), (4, 2, 4), (4, 1, 5)
Abbassiamo di uno x1, continuando più volte otteniamo:
(3, 5, 2), (3, 4, 3), (3, 3, 4), (3, 2, 5)
(2, 5, 3), (2, 4, 4), (2, 3, 5)
(1, 5, 4), (1, 4, 5)
(0, 5, 5)
In totale 6 + 5 + 4 + 3 + 2 + 1 = 6*7/2 = 21
Quindi, dato n, le partizioni P sono:

(2)    P = (max xi- min xi + 1)(max xi - min xi + 2)/2

Questo se le persone tra cui si dividono i recipienti si intendono distinte.

Se, invece, si vogliono trovare solo le partizioni distinte, indifferentemente dalle persone, allora, per esempio, le tre partizioni (5, 5, 0), (5, 0, 5) e (0, 5, 5) valgono per una, che in linguaggio normale sarebbe definita come: "Due persone (qualsiasi) prendono cinque recipienti pieni, l'altra persona prende nessun recipiente (pieno)". In tal caso, sempre con n=10, usando come criterio di ordinamento la regola x1>=x2>=x3 e con lo stesso procedimento di prima avremmo:
(5, 5, 0), (5, 4, 1), (5, 3, 2)
(4, 4, 2), (4, 3, 3)
Ci sono ora due formule per calcolare il numero P di partizioni distinte; denotando [a/b] la parte intera di a/b abbiamo:

P1 = (k + 1)(k + 2)/2 - Sommatoria(k + 2 - 3j)
per j che va da 1 a [(k + 1)/3]
con Sommatoria(k + 2 - 3j)=0 per [(k + 1)/3]<1
se n = (4k + 2) oppure n = (4k + 5)

P2 = (k + 1)(k + 2)/2 - Sommatoria(k + 3 - 3j)
per j che va da 1 a [(k + 2)/3]
con Sommatoria(k + 3 - 3j)=0 per [(k + 2)/3]<1
se n = (4k + 3) oppure n = 4k

6. Divisioni di recipienti e triangoli
???

7. Quante soluzioni ha questo problema?
Per rispondere alla domanda ho scritto un piccolo programma in BASIC. Questa è la risposta che mi ha dato il computer. E' divisa in due parti.

Prima parte.
Trovare tutte le combinazioni di 9 botti (pipas) che contengano in totale 4.5 botti di vino e che contengano ALMENO una botte di ciascun tipo. Infatti le botti sono in tutto 45 e il vino è in tutto 90/4 di botte.
Perciò ad ogni figlio toccheranno 45/5 = 9 botti e (90/4)/5 = 9/2 = 4.5 unità di vino   In tutto ci sono 8 CASI rappresentati nella seguente tabella.

1 - 1  1  5  1  1  9  4.5
 2 - 1  2  3  2  1  9  4.5
 3 - 1  3  1  3  1  9  4.5
 4 - 1  3  2  1  2  9  4.5
 5 - 2  1  2  3  1  9  4.5
 6 - 2  1  3  1  2  9  4.5
 7 - 2  2  1  2  2  9  4.5
 8 - 3  1  1  1  3  9  4.5

Le colonne sono:
1° colonna = numero progressivo del CASO
2° colonna = numero di botti piene
3° colonna = numero di botti piene a 3/4
4° colonna = numero di botti piene a 1/2
5° colonna = numero di botti piene a 1/4
6° colonna = numero di botti vuote
7° colonna = totale botti, serve a controllare che siano sempre 9
8° colonna = totale di vino, serve a controllare che sia sempre 4.5

Seconda parte.
Trovare le possibili suddivisioni tra i figli. Si tratta di cercare, tra gli 8 CASI trovati nella prima parte tutti quei GRUPPI DI 5 che soddisfano il problema, cioè che utilizzano correttamente le 45 botti. In pratica, la somma di ogni colonna, come pure di ogni riga, deve dare 9 botti. Il computer ha trovato 3 soluzioni.
Ogni riga rappresenta ciò che deve ricevere un figlio.
Le colonne sono:
1° colonna = numero del CASO trovato nella prima parte
2° colonna = numero di botti piene
3° colonna = numero di botti piene a 3/4
4° colonna = numero di botti piene a 1/2
5° colonna = numero di botti piene a 1/4
6° colonna = numero di botti vuote

Soluzione n. 1
-------------------
 2 - 1  2  3  2  1
 3 - 1  3  1  3  1
 6 - 2  1  3  1  2
 7 - 2  2  1  2  2
 8 - 3  1  1  1  3
--------

Soluzione n. 2
-------------------
 2 - 1  2  3  2  1
 4 - 1  3  2  1  2
 5 - 2  1  2  3  1
 7 - 2  2  1  2  2
 8 - 3  1  1  1  3
--------

Soluzione n. 3
-------------------
 3 - 1  3  1  3  1
 4 - 1  3  2  1  2
 5 - 2  1  2  3  1
 6 - 2  1  3  1  2
 8 - 3  1  1  1  3
--------

Mi sembra che queste soluzioni siano tutte diverse. Molte persone non gradiscono le soluzioni trovate con il computer perché lo ritengono "FORZA BRUTA". Preferiscono la raffinatezza del ragionamento matematico. Anch'io la penso così però mi piace anche lavorare con il computer.
Un linguaggio di programmazione è un linguaggio logico-matematico formale in piena regola. Perciò qualunque dimostrazione fatta con un linguaggio di programmazione è matematicamente valida. Naturalmente il programma deve essere fatto bene, l'interprete del linguaggio deve essere perfetto e il comportamento del computer deve essere stabile. Tutte cose difficili da verificare!
Una piccola nota: il problema chiede anche "que nenhum deles recebesse o mesmo número de todos os tipos de pipas". Non esiste nessuna soluzione di questo tipo. Ma non so se ho capito bene questa condizione: "nessuno dei figli deve ricevere lo stesso numero di tutti i tipi di botte". Ciascuno deve ricevere 9 botti e i tipi diversi di botte sono 5. Siccome 9 non è divisibile per 5 nessuno può ricevere lo stesso numero di tutti i tipi di botte.
Ecco il programma che ho utilizzato.
Amo il linguaggio BASIC e quando scrivo i miei semplici programmi mi piace anche vedere come si presentano dal punto di vista grafico ed estetico.
!'----------------
DIM combi(100,5)
DIM tot(9)
LET  cont = 0
FOR i = 1 TO 9
   FOR j = 1 TO 9
      FOR k = 1 TO 9
         FOR l = 1 TO 9
            FOR m = 1 TO 9
               LET  c = i+j*3/4+k*2/4+l*1/4
               LET  nv = i+j+k+l+m        
               IF c = 9/2 AND nv = 9 THEN
                  LET  cont = cont+1
                  LET  combi(cont,1) = i
                  LET  combi(cont,2) = j
                  LET  combi(cont,3) = k
                  LET  combi(cont,4) = l
                  LET  combi(cont,5) = m
                  PRINT cont;"-";i;j;k;l;m;nv;c
               END IF               
            NEXT m
         NEXT l
      NEXT k
   NEXT j
NEXT i
  PRINT "Fine prima parte"
!'---------------------
LET  nsol=0
FOR i = 1 TO cont
   FOR j = i+1 TO cont
      FOR k = j+1 TO cont
         FOR l = k+1 TO cont
            FOR m = l+1 TO cont
            
               FOR u = 1 TO 5
                  LET  tot(u) = combi(i,u)+ combi(j,u)+ combi(k,u)+ combi(l,u)+ combi(m,u)
               NEXT u
                
               LET  buono = 1
               FOR u = 1 TO 5
                  IF tot(u) <> 9 THEN
                     LET  buono = 0
                     EXIT FOR
                  END IF
                NEXT u
               IF buono = 1 THEN
                  LET  nsol=nsol+1
                  PRINT "Soluzione n.";nsol;"-------------------"
                  PRINT i;"-";
                  FOR u = 1 TO 5
                     print combi(i,u);
                  NEXT u
                  PRINT
                  
                  PRINT j;"-";
                  FOR u = 1 TO 5
                     PRINT combi(j,u);
                  NEXT u
                  PRINT
                  
                  PRINT k;"-";
                  
                  FOR u = 1 TO 5
                     PRINT combi(k,u);
                  NEXT u
                  PRINT
                  
                  PRINT l;"-";
                  FOR u = 1 TO 5
                     PRINT combi(l,u);
                  NEXT u
                  PRINT
                  
                  PRINT m;"-";
                  FOR u = 1 TO 5
                     PRINT combi(m,u);
                  NEXT u
                  
                  print            
                  PRINT "--------"
               END IF       
            NEXT m
         NEXT l
      NEXT k
   NEXT j
NEXT i
 
PRINT "Fine seconda parte"
!'---------------------
END

Ringrazio il prof. Roberto Doniez per la seguente risoluzione del problema.

1. Se trata de asignar 45 pipas entre 5 sobrinos: entonces a cada uno de ellos les corresponderá 9 pipas.

2. De las pipas hay : 9 llenas, 9 ¾ llenas, 9 medias, 9 ¼ llenas y también 9 vacías.

Entonces el total de vino a repartir es: 22, 5 volúmenes y por lo tanto le corresponde 4,5 volúmenes a cada sobrino.

3. Entonces a cada sobrino le corresponden 9 pipas y 4,5 volúmenes.

4. Puesto que deben repartirse 4,5 volúmenes a cada uno de los sobrinos, existen sólo 5 casos para la asignación de las pipas del tipo ¾ llenas y ¼ llenas (que se me ocurrió pensarlas como un bloque), a saber:

Nº de Pipas ¾ llenas 3 3 2 1 1
Nº de Pipas ¼ llenas 3 1 2 3 1
Volumen reunido en cada caso 3 2,5 2 1,5 1

5. Tabla fundamental de casos:
Se ordenan según un máximo para las pipas llenas, luego se asignan las posibilidades para la pareja ¾ - ¼ y con esto ya es obvio la cantidad a asignar para las ½ llenas (pues siempre debe tenerse 4,5 volúmenes) y finalmente se completan las pipas vacías (pues siempre debe tenerse 9 pipas). Veamos:

1 llena   ¾ llenas ¼ llenas   ½ llena 0 llena Vol. reunido Nº pipas

3

 

1

1

 

1

3

4,5

9

2

 

2

2

 

1

2

4,5

9

2

 

1

3

 

2

1

4,5

9

2

 

1

1

 

3

2

4,5

9

1

 

3

3

 

1

1

4,5

9

1

 

3

1

 

2

2

4,5

9

1

 

2

2

 

3

1

4,5

9

1

 

1

1

 

5

1

4,5

9

Nota: el contenido de esta tabla coincide exactamente con el material que tu me enviaste y que como se ve tiene 8 casos.

Observaciones a partir de ella:

1. Es claro que cada solución al problema pasará por escoger 5 filas de esta tabla.

2. Pero observando bien se descubren dos cosas: que cualquiera sea la solución siempre está la primera fila, de otra manera alguno de los sobrinos o tiene más de 9 pipas o menos de 9 pipas.

3. También es claro que la última fila una vez aceptada causa problemas de imposibilidad. Luego en ninguna solución aparecerá la última fila.

4. Esto significa que de la ocho posibilidades sólo hay siete (la última desaparece como posible) y la primera siempre está. La combinatoria por lo tanto no es tan tremenda y se reduce en principio a tres modos:

3 1 1 1 3   3 1 1 1 3   3 1 1 1 3
2 2 2 1 2   2 2 2 1 2   2 1 3 2 1
2 1 3 2 1   2 1 1 3 2   2 1 1 3 2
                                 
                                 

5. Cada una de la filas restantes puede escogerse dentro de 4 alternativas y esto da 6 posibilidades, de ellas sólo una sirve, a saber:

3 2 1 1 3   3 2 1 1 3   3 2 1 1 3
2 2 2 1 2   2 2 2 1 2   2 1 3 2 1
2 1 3 2 1   2 1 1 3 2   2 1 1 3 2
1 3 1 2 2   1 3 3 1 1   1 3 3 1 1
1 2 2 3 1   1 2 2 3 1   1 3 1 2 2

6. Finalmente se descubre que sólo hay tres soluciones al problema (esto coincide con lo que me enviaste hace ya un buen tiempo).

Espero que el desarrollo sea tan claro como supongo.

 

Ringrazio Oldfriend per il codice in Decimal Basic.
Purtroppo nel copia&incolla si è persa l'indentazione.

!'Ci sono 45 botti di cui 9 piene, 9 a 2/3, 9 a metà,
!'9 a 1/3 e 9 vuote:vanno divise a 5 persone in modo
!'che ognuno abbia lo stesso numero di botti (almeno 1
!'di ogni tipo) e la stessa quantità del liquido contenuto.
!'In quanti modi si può fare, senza contare le ripetizioni?

LET k=0

for a = 1 to 9
for b = 1 to 9
for c = 1 to 9
for d = 1 to 9
for e = 1 to 9

if a+b+c+d+e = 9 and 4*a+3*b+2*c+d=18 then LET k=k+1
next E
next D
next C
next B
next A

dim x(k,5)

LET j=0
for a = 1 to 9
for b = 1 to 9
for c = 1 to 9
for d = 1 to 9
for e = 1 to 9

if a+b+c+d+e = 9 and 4*a+3*b+2*c+d=18 then

LET j= j +1
LET x(j,1)=a
LET x(j,2)=b
LET x(j,3)=c
LET x(j,4)=d
LET x(j,5)=e

end if
next E
next D
next C
next B
next A

dim y(1000,k)
dim z(k)

LET cont=0
LET co=1
for a=1 to k
for b=1 to k
for c=1 to k
for d=1 to k
for e=1 to k

for m= 1 to 5
LET somma=x(a,m)+x(b,m)+x(c,m)+x(d,m)+x(e,m)
if somma<>9 then goto 20
next M

LET cont=cont+1
LET z(a)=z(a)+1
LET z(b)=z(b)+1
LET z(c)=z(c)+1
LET z(d)=z(d)+1
LET z(e)=z(e)+1

if cont=1 then
for m=1 to k
LET y(co,m)=z(m)
next M
mat z=zer
else
for m=1 to co
LET co2=0
for n=1 to k
if z(n)=y(m,n)then LET co2=co2+1
next N
if co2=k then
mat z=zer
goto 20
end if
next M
LET co=co+1
for m=1 to k
LET y(co,m)=z(m)
next M
mat z=zer
end if

20
next E
next D
next C
next B
next A
If cont>0 then
print co;" combinazioni valide senza ripetizioni"
print

for m=1 to co
for n=1 to k
if y(m,n)>0 then
for p=1 to y(m,n)
for q=1 to 5
print str$(x(n,q));
next Q
print
next P
end if
next N
print
next M
end if
END


Sito Web realizzato da Gianfranco Bo