Middle — Senior
Agar zarlar soni parametr bo'lsa, yig'indilar va kombinatsiyalarni hisoblash yechimini qanday o'zgartirish mumkin?
sobes.tech AI
AIdan javob
Agar o'yinchoq kubiklar soni parametr bo'lsa, yig'indilar va kombinatsiyalarni hisoblash yechimi dinamik va kengaytiriladigan bo'lishi kerak.
Yondashuvlar:
-
Rekursiv tekshirish:
- Har bir kubik uchun, mumkin bo'lgan barcha qiymatlarni (1–6) ko'rib chiqamiz.
- Qiymatlarni rekursiv qo'shib, har bir yig'indiga mos keladigan kombinatsiyalar sonini hisoblaymiz.
-
Dinamik dasturlash:
- Indeksi yig'indi bo'lgan va qiymati bu yig'indiga erishish usullari soni bo'lgan massiv yoki lug'atdan foydalanamiz.
- Dastlab, 0 kubik uchun, 0 yig'indiga erishish usullari soni 1 ga teng.
- Har bir kubik uchun, yangi yig'indilar uchun usullar sonini qo'shib, massivni yangilaymiz.
Go tilida dinamik dasturlash misoli:
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
}
// Foydalanish:
// sums := diceSums(3)
// fmt.Println(sums) // 3 ta kubik bilan har bir yig'indiga mos keladigan kombinatsiyalar sonini chiqaradi
Bu yondashuv har qanday kubik soni uchun kombinatsiyalar sonini samarali hisoblash imkonini beradi, barcha variantlarni qo'lda tekshirmasdan.