Domanda sull'aggiunta di valore in un array ad un'altra matrice per contare c ++

voti
0

Ecco la situazione:

L'utente può scegliere fino a 4 dadi sul tavolo con un range [1-12] volti che vogliono (sì, 1 faccia dei dadi è una cosa qui). Poi il programma calcolerà tutte le possibilità di risultato.

Per esempio: 2 dadi, 1 ° con 6 facce, 2 ° con 2 facce.

Produzione:

Somma di 2 = 1

Somma di 3 = 2

Somma di 4 = 2

Somma di 5 = 2

Somma di 6 = 2

Somma di 7 = 2

Somma di 8 = 1

Ho scoperto il modello per il calcolo con tutte le possibilità con diversi di n. di dadi e volti che hanno, ecco l'illustrazione:

4 dadi con facce [6, 2, 3, 4] rispettivamente

Clicca qui per controllare il motivo

zona blu è un dado a 6 facce zona verde si trova a 6 facce con 2 volte zona gialla è anello verde con 3 volte Leggi zona è ad anello zona gialla con 4 volte

I numeri a parte sono il conteggio della comparsa di ogni somma ed è corretto tutto il tempo, non importa ciò che gli ingressi sono.

Ogni nuova area sarà inizio al id [5] e dopo ogni iterazione l'area di processo si sposterà [i + 1] spazio fino alla fine.

Tuttavia, ho tentato molte volte e ancora non riesce a trovare il modo corretto per implementare questo modello nel programma C ++.

I miei codici sono in questo modo:

// 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;
    }

Questo non funziona comunque.

Come posso cambiarlo?

È pubblicato 24/10/2019 alle 12:54
fonte dall'utente
In altre lingue...                            

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