Sobes.tech
Middle — Senior

Ինչպե՞ս փոխել լուծումը գնդակների գումարների և համակցությունների հաշվարկի համար, եթե գնդակների քանակը պարամետր է։

sobes.tech AI

Պատասխան 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 խեցգետնանման դեպքում

Այս մոտեցումը թույլ է տալիս արդյունավետ հաշվարկել ցանկացած քանակի խեցգետնանման համար համադրությունների քանակը՝ առանց ձեռքով բոլոր տարբերակները անցնելու։