Middle — Senior
21
Как изменить решение для подсчёта сумм и комбинаций игральных кубиков, если количество кубиков параметр?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Если количество игральных кубиков становится параметром, то решение для подсчёта сумм и комбинаций должно быть динамическим и масштабируемым.
Подходы:
-
Рекурсивный перебор:
- Для каждого кубика перебираем все возможные значения (1–6).
- Рекурсивно суммируем значения и считаем количество комбинаций для каждой суммы.
-
Динамическое программирование:
- Используем массив или словарь, где индекс — сумма, а значение — количество способов получить эту сумму.
- Изначально для 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 кубиках
Такой подход позволяет эффективно вычислять количество комбинаций для любого количества кубиков без перебора всех вариантов вручную.