Middle — Senior
Cum se modifică soluția pentru calcularea sumelor și combinațiilor de zaruri dacă numărul de zaruri este un parametru?
sobes.tech AI
Răspuns de la AI
Dacă numărul de zaruri devine un parametru, soluția pentru calcularea sumelor și combinațiilor trebuie să fie dinamică și scalabilă.
Abordări:
-
Parcurgere recursivă:
- Pentru fiecare zar, parcurgeți toate valorile posibile (1–6).
- Sumați valorile recursiv și numărați numărul de combinații pentru fiecare sumă.
-
Programare dinamică:
- Utilizați un array sau dicționar în care indexul reprezintă suma, iar valoarea numărul de moduri de a obține acea sumă.
- Inițial, pentru 0 zaruri, numărul de moduri de a obține suma 0 este 1.
- Pentru fiecare zar, actualizați array-ul adăugând numărul de moduri pentru noile sume.
Exemplu în Go cu programare dinamică:
func diceSums(numDice int) map[int]int {
dp := make(map[int]int)
dp[0] = 1
for i := 0; i < numDice; i++ {
next := make(map[int]int)
for sum, count := range dp {
for face := 1; face <= 6; face++ {
next[sum+face] += count
}
}
dp = next
}
return dp
}
// Utilizare:
// sums := diceSums(3)
// fmt.Println(sums) // Va afișa numărul de combinații pentru fiecare sumă cu 3 zaruri
Această abordare permite calcularea eficientă a numărului de combinații pentru orice număr de zaruri fără a parcurge manual toate variantele.