Întrebare privind adăugarea de valoare într-o matrice la o altă matrice de numărare c ++

voturi
0

Iată situația:

Utilizatorul poate alege până la 4 zarurile pe masă, cu un interval [1-12] se confruntă ei doresc (Da, 1 fata zaruri este un lucru aici). Apoi, programul va calcula toate posibilitățile de rezultat.

De exemplu: 2, 1 dices cu 6 fețe, 2 cu 2 fețe.

ieşire:

Suma de 2 = 1

Suma de 3 = 2

Suma de 4 = 2

Suma de 5 = 2

Suma de 6 = 2

Suma de 7 = 2

Suma de 8 = 1

Am descoperit modelul pentru a calcula cu toate posibilitățile cu diferite de nr. de zaruri și chipuri pe care le au, aici e ilustrație:

4 dices cu fețe [6, 2, 3, 4], respectiv

Click aici pentru a verifica modelul

Zona albastră este un zar cu 6 fețe Zona verde este 6 fețe cu 2 ori zona creață bucla zona verde de 3 ori zona Read este bucla zona galbenă de 4 ori

Numerele deoparte sunt numărătoarea de apariția fiecărei sume și este corect tot timpul, indiferent de ce intrări.

Fiecare nouă zonă va fi începe de la id-ul [5] și după fiecare iterație zona de proces se va deplasa [i + 1] spatiu pana la final.

Cu toate acestea, am încercat de multe ori și încă nu pot găsi modul corect de a pune în aplicare acest model în program C ++.

Codurile mele sunt ca acest lucru:

// Calculate the first iteration of dices

for (int k = 0; k < faces[2]; k++) {
        for (int j = num + k; j < (num + faces[1] + k); j++) {
            tempCount[j]++;
        }
    }

    // Copy results into counter1[]

    for (int i = num; i <= faceCounter; i++) {
        counter1[i] += tempCount[i];
    }

    // Find out the remaining dices

    for (int i = 2; i < num; i++) {
        for (int k = 0; k < faces[i+1]; k++) {                          // Calculate the count range
            for (int j = num + k + 1; j < (num + faces[i] + k); j++) {  // Add the previous counter's value into temp counter
                tempCount[j] += counter1[i];
            }
            if (k == faces[i + 1] - 1)                                  // Make sure finished the for loop first then to final addition, won't duplicate data
                finished = 1;
        }

        //Load results back to counter, which will using it back in loop for further counting

        for (int i = num; (i <= faceCounter) && (finished = 1); i++) {
            counter1[i] += tempCount[i];
        }

        finished = 0;
    }

Acest lucru nu este de lucru, totuși.

Cum pot schimba?

Întrebat 24/10/2019 la 12:54
sursa de către utilizator
În alte limbi...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more