Sobes.tech
Middle — Senior
21

Как изменить решение для подсчёта сумм и комбинаций игральных кубиков, если количество кубиков параметр?

Компании, где спрашивали
OZONOZON

Ответ от нейросети

sobes.tech AI

Если количество игральных кубиков становится параметром, то решение для подсчёта сумм и комбинаций должно быть динамическим и масштабируемым.

Подходы:

  1. Рекурсивный перебор:

    • Для каждого кубика перебираем все возможные значения (1–6).
    • Рекурсивно суммируем значения и считаем количество комбинаций для каждой суммы.
  2. Динамическое программирование:

    • Используем массив или словарь, где индекс — сумма, а значение — количество способов получить эту сумму.
    • Изначально для 0 кубиков количество способов получить сумму 0 равно 1.
    • Для каждого кубика обновляем массив, добавляя количество способов для новых сумм.

Пример на Go с динамическим программированием:

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
}

// Использование:
// sums := diceSums(3)
// fmt.Println(sums) // Выведет количество комбинаций для каждой суммы при 3 кубиках

Такой подход позволяет эффективно вычислять количество комбинаций для любого количества кубиков без перебора всех вариантов вручную.