Dati n dadi ciascuno con m facce, numerate da 1 a m, trovare il numero di modi per ottenere somma X.
X è la somma dei valori di ciascuna faccia quando vengono lanciati tutti i dadi.
Con il codice sottostante calcoliamo tutte le permutazioni = (
Ma siamo alla ricerca di una sola permutazione di ogni risultato:
esce 4 e poi 3 è lo stesso se esce 3 e poi 4 (esempio con due dadi da 4 facce e con somma 7)
- Codice:
#include <iostream>
#include <string.h>
using namespace std;
int trovamodi(int m, int n, int x){
int tabella[n + 1][x + 1];
memset(tabella, 0, sizeof(tabella));
for (int j = 1; j <= m && j <= x; j++)
tabella[1][j] = 1;
for (int i = 2; i <= n; i++)
for (int j = 1; j <= x; j++)
for (int k = 1; k <= m && k < j; k++)
tabella[i][j] += tabella[i-1][j-k];
return tabella[n][x];
}
int main(void){
cout << trovamodi(4, 2, 7) << endl;
// cout << trovamodi(4, 2, 7) << endl;
// cout << trovamodi(4, 3, 6) << endl;
// cout << trovamodi(6, 3, 8) << endl;
// cout << trovamodi(4, 2, 5) << endl;
// cout << trovamodi(4, 3, 5) << endl;
return 0;
}
Quello che si vuole è ritornare solo i modi senza contare tutte le possibili permutazioni?
Per esempio:
trovamodi (4, 2, 7) deve tornare solo uno (perché 3 + 4 o 4 + 3 è lo stesso come già detto sopra)
Altro esempio:
trovamodi (4, 3, 6) deve dare tre modi (che sono: 1 + 1 + 4 e 1 + 2 + 3 e 2 + 2 + 2)
[in quest'ultimo caso abbiamo 3 dadi con 4 facce e vogliamo la somma 6]
Bisogna lavorare con una tabella a tre dimensioni sicuro ma non riesco a muovermi col 3D