Middle — Senior
Ինչպե՞ս փոխել լուծումը գնդակների գումարների և համակցությունների հաշվարկի համար, եթե գնդակների քանակը պարամետր է։
sobes.tech AI
Պատասխան 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 խեցգետնանման դեպքում
Այս մոտեցումը թույլ է տալիս արդյունավետ հաշվարկել ցանկացած քանակի խեցգետնանման համար համադրությունների քանակը՝ առանց ձեռքով բոլոր տարբերակները անցնելու։