Question sur la valeur ajoutée dans un réseau à un autre réseau pour compter c ++

voix
0

Voici la situation:

L'utilisateur peut choisir jusqu'à 4 dices sur la table avec une gamme [1-12] visages qu'ils veulent (Oui, 1 dé face est une chose ici). Ensuite, le programme calcule toutes les possibilités de résultats.

Par exemple: 2, 1er avec dés 6 faces, 2e avec 2 faces.

Sortie:

Somme des 2 = 1

Somme des 3 = 2

Somme des 4 = 2

Somme 5 = 2

Somme des 6 = 2

Somme des 7 = 2

Somme des 8 = 1

J'ai trouvé le modèle pour calculer avec toutes les possibilités avec différents sans. des visages et dices qu'ils ont, voici l'illustration:

4 dices avec des faces [6, 2, 3, 4] respectivement

Cliquez ici pour vérifier le modèle

La zone bleue est un dé avec 6 faces Zone verte est 6 faces avec 2 fois la zone jaune est boucle zone verte avec 3 fois Zone de lecture est boucle zone jaune avec 4 fois

Les chiffres sont à part le compte de l'apparition de chaque somme et il est correct tout le temps, peu importe ce que les entrées sont.

Chaque nouvelle zone sera à commencer id [5] et après chaque itération, la zone de traitement passera l'espace [i + 1] jusqu'à la fin.

Cependant, je l'ai essayé plusieurs fois et ne peut toujours pas trouver la bonne façon de mettre en œuvre ce modèle en c ++ programme.

Mes codes sont comme ceci:

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

Ce ne fonctionne pas bien.

Comment puis-je le changer?

Créé 24/10/2019 à 12:54
source utilisateur
Dans d'autres langues...                            

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