Sobes.tech
Middle — Senior

Hogyan módosítsuk a megoldást a dobókockák összegének és kombinációinak kiszámítására, ha a dobókockák száma paraméter?

sobes.tech MI

Válasz az MI-től

Ha a dobókockák száma paraméterré válik, akkor a összegek és kombinációk számolására szolgáló megoldásnak dinamikusnak és skálázhatónak kell lennie.

Megközelítések:

  1. Rekurzív átfutás:

    • Minden dobókocka esetében vizsgáljuk meg az összes lehetséges értéket (1–6).
    • Rekurzívan adjuk össze az értékeket, és számoljuk meg az összes kombináció számát minden összeghez.
  2. Dinamikus programozás:

    • Használjunk egy tömböt vagy szótárat, ahol az index az összeg, az érték pedig az adott összeg elérésének módjainak száma.
    • Kezdetben, 0 dobókocka esetén, az összeg 0 elérésének módjai száma 1.
    • Minden dobókocka esetében frissítsük a tömböt az új összeghez tartozó módok számával.

Példa Go nyelven dinamikus programozással:

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
}

// Használat:
// sums := diceSums(3)
// fmt.Println(sums) // Megmutatja az összes összeghez tartozó kombinációk számát 3 dobókockával

Ez a megközelítés hatékonyan képes kiszámítani a kombinációk számát bármennyi dobókocka esetén, anélkül, hogy manuálisan végig kellene menni az összes lehetőségen.