Sobes.tech
Middle — Senior

Əgər zarların sayı parametrdirsə, cəm və kombinasiyaların hesablanması üçün həll necə dəyişdirilir?

sobes.tech Süni İntellekt

AI-dan cavab

Əgər oyunçuların zar sayı parametr halına çevrilərsə, cəm və kombinasiyaları hesablamaq üçün həll dinamik və miqyaslana bilən olmalıdır.

Yanaşmalar:

  1. Rekursiv keçid:

    • Hər bir zar üçün, mümkün olan bütün dəyərləri (1–6) yoxlayın.
    • Dəyərləri rekursiv toplayın və hər cəm üçün kombinasiyaların sayını hesablayın.
  2. Dinamik proqramlaşdırma:

    • İndeksi cəm olan və dəyəri bu cəmi əldə etmə yollarının sayı olan massiv və ya lüğət istifadə edin.
    • Əvvəlcə, 0 zar üçün, 0 cəmi əldə etmə yollarının sayı 1-dir.
    • Hər bir zar üçün, yeni cəmlər üçün yolların sayını əlavə edərək massivləri yeniləyin.

Go dilində dinamik proqramlaşdırma nümunəsi:

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
}

// İstifadə:
// sums := diceSums(3)
// fmt.Println(sums) // 3 zar üçün hər cəm üçün kombinasiyaların sayını göstərəcək

Bu yanaşma hər hansı sayda zar üçün kombinasiyaların sayını səmərəli hesablamağa imkan verir, bütün variantları əl ilə yoxlamadan.