Dice Throw Problem

This algorithm finds the number of ways to get summation of values on each face when all the dice are thrown.



									/*****Please include following header files*****/
// stdlib.h
/***********************************************/

int** Create2DArray(int rowCount, int colCount) {
	int* rArray = malloc(sizeof(int*) * rowCount);

	for (int i = 0; i < rowCount; i++) {
		rArray[i] = malloc(sizeof(int) * colCount);
	}

	return rArray;
}

int** Fill2DArray(int** arr, int rowCount, int colCount, int value)
{
	for (int i = 0; i < rowCount; ++i)
		for (int j = 0; j < colCount; ++j)
			arr[i][j] = value;
}

int FindWays(int faces, int dice, int sum)
{
	int** table = Create2DArray(dice + 1, sum + 1);
	Fill2DArray(table, dice + 1, sum + 1, 0);

	for (int i = 1; i <= faces && i <= sum; ++i)
		table[1][i] = 1;

	for (int i = 2; i <= dice; ++i)
	{
		for (int j = 1; j <= sum; ++j)
		{
			for (int k = 1; k <= faces && k < j; ++k)
			{
				table[i][j] += table[i - 1][j - k];
			}
		}
	}

	return table[dice][sum];
}
								


Example

									int result = FindWays(4, 3, 5);
								


Output

									6