Sobes.tech
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:

  1. 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.
  2. 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.