Betrokken op toegevoegde waarde in een array om een ​​ander stelsel voor het tellen van C ++

stemmen
0

Hier is de situatie:

De gebruiker kan kiezen uit maximaal 4 dobbelstenen op de tafel met een bereik [1-12] gezichten die ze willen (ja, 1 gezicht dobbelsteen is een DING hier). Dan zal het programma al de uitkomst mogelijkheden te berekenen.

Bijvoorbeeld: 2 dobbelstenen, 1 met 6 gezichten, 2e met 2 gezichten.

Output:

Som 2 = 1

Som van 3 = 2

Bedrag van 4 = 2

Som van 5 = 2

Som van 6 = 2

Bedrag van 7 = 2

Som van 8 = 1

Ik heb ontdekt de patroon te berekenen met alle mogelijkheden verschillende no. dobbelstenen en gezichten die ze hebben, hier is de illustratie:

4 dobbelstenen met gezichten [6, 2, 3, 4] respectievelijk

Klik hier om het patroon te controleren

Blue gebied is een dobbelsteen met 6 gezichten Green bevindt zich op 6 gezichten met 2 keer geel gebied is groene zone lus met 3 keer lezen gebied is geel gebied lus met 4 keer

De nummers opzij zijn de telling van de verschijning van elk bedrag en het is juist de hele tijd, ongeacht wat ingangen zijn.

Elke nieuwe gebied zal beginnen bij id [5] en na elke iteratie van het proces gebied zal verschuiven [i + 1] ruimte tot het einde.

Echter, ik heb vele malen geprobeerd en nog steeds op de juiste manier om dit patroon in c ++ programma uit te voeren niet vinden.

Mijn codes zijn als volgt:

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

Dit is echter niet werkt.

Hoe kan ik het veranderen?

De vraag is gesteld op 24/10/2019 om 12:54
bron van user
In andere talen...                            

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