Questão em adicionar valor em uma matriz para outra matriz para a contagem de C ++

votos
0

Aqui está a situação:

O usuário pode escolher até 4 cortam na tabela com um intervalo [1-12] enfrenta querem (Sim, um cara dados é uma coisa aqui). Em seguida, o programa irá calcular todas as possibilidades de resultado.

Por exemplo: 2 dados, 1º com 6 faces, 2º com 2 caras.

Resultado:

Soma de 2 = 1

Soma de 3 = 2

Soma de 4 = 2

Soma de 5 = 2

Soma de 6 = 2

Soma de 7 = 2

Soma de 8 = 1

Eu descobri o padrão para calcular com todas as possibilidades com diferente de nenhum. de corta e rostos que eles têm, aqui está a ilustração:

4 cortam com caras [6, 2, 3, 4], respectivamente

Clique aqui para verificar o padrão

área azul é um dado com 6 faces área verde é de 6 faces com 2 vezes a área amarela é o loop área verde com 3 vezes Leia área é o loop área amarela com 4 vezes

Os números de lado são a contagem do aparecimento de cada soma e é correto o tempo todo, não importa o que as entradas são.

Cada nova área será começar a id [5] e depois de cada iteração área de processo vai mudar [i + 1] espaço até o final.

No entanto, eu tentei muitas vezes e ainda não conseguiu encontrar a maneira correta de implementar este padrão em c ++ programa.

Meus códigos são assim:

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

Isto não está funcionando embora.

Como posso mudá-lo?

Publicado 24/10/2019 em 12:54
fonte usuário
Em outras línguas...                            

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