Вопрос по добавлению значения в массиве в другой массив для подсчета c ++ - PullRequest
0 голосов
/ 24 октября 2019

Вот ситуация:

Пользователь может выбрать до 4 кубиков на столе с диапазоном [1-12] граней, которые они хотят (Да, 1 кубик - это ВЕЩЬ здесь). Затем программа рассчитает все возможные результаты.

Например: 2 кубика, 1-й с 6-ю гранями, 2-й с 2-мя гранями.

Вывод:

Сумма 2 =1

Сумма 3 = 2

Сумма 4 = 2

Сумма 5 = 2

Сумма 6 = 2

Сумма 7 = 2

Сумма 8 = 1

Я нашел схему для расчета со всеми возможностями с различными из нет. кубиков и граней, которые у них есть, вот иллюстрация:

4 кубика с гранями [6, 2, 3, 4] соответственно

Нажмите здесь, чтобы проверить шаблон

Синяя область - игральные кости с 6 гранями. Зеленая область - 6 граней, в 2 раза. Желтая область - зеленая область, петля - в 3 раза. Область чтения - желтая область, петля - 4 раза

. подсчет появления каждой суммы и она правильная все время, независимо от того, какие входные данные.

Каждая новая область будет начинаться с id [5] и после каждой итерации область процесса будет сдвигаться [i + 1]до конца.

Однако я много раз пытался и до сих пор не могу найти правильный способ внедрения этого шаблона в программу на c ++.

Мои коды такие:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
  int num, face, faceCounter;
  int faces[15] = { 0 }, counter1[150] = { 0 }, tempCount[150] = { 0 };

  cout << "How many dices: ";
  cin >> num;

    for (int i = 1; i <= num; i++) {
        cout << "Face for dice number: " << i;
        cin >> face;

        faces[i] = face;           //Store number of face into each dice
        faceCounter += face;       // Store how many outputs needed
    }

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

    for (int i = num; i <= faceCounter; i++) {
        cout << "Sum of " << i << " = " << counter1[i] << endl;

  return 0;
}

Это не работает, хотя.

Мой желаемый вывод:

Sum of 4 = 1
Sum of 5 = 4
Sum of 6 = 9
Sum of 7 = 15
Sum of 8 = 20
Sum of 9 = 23
Sum of 10 = 23
Sum of 11 = 20
Sum of 12 = 15
Sum of 13 = 9
Sum of 14 = 4
Sum of 15 = 1

Как я могу изменить его?

...