int main(void)
{
/*
** Probability array.
** First number must be >= the number of dice.
** Second must be >= dice count times sides.
*/
int ray[6][40] ;
int ndice ;
int target ;
int sides = 6 ; /* This example uses 6 sided dice. */
int bumpby ;
int base ;
/* Fill ray with zeroes. */
for (ndice = 0 ; ndice <= 6 ; ndice++ )
for (target = 0 ; target <= 40 ; target++ )
ray[ndice][target] = 0 ;
/* There is one way to roll a zero on zero dice. */
ray[0][0] = 1 ;
/*
** Build the array starting with one dice
** add one more dice each time around this loop.
** In this example, we only roll 3 dice.
** The number of dice is determined by the <=
** middle statement of the following for.
*/
for (ndice = 1 ; ndice <= 3 ; ndice++)
/*
** What numbers can one roll with one less dice?
** Smallest number is the number of dice.
** Largest number is the number of dice times
** the number of sides.
** For each number that you could roll with one less dice,
** go around the second loop once.
*/
for (base = ndice - 1 ; base <= (ndice - 1) * sides ; base++)
{
/*
** How many ways could we roll a base with one less dice?
** The answer is already saved in the array. Pull it out.
*/
bumpby = ray[ndice - 1][base] ;
/* Add bumpby to each slot in way from 1 to sides. */
for (target = base + 1 ; target <= base + sides ; target++ )
ray[ndice][target] += bumpby ;
}
/* Print the results. */
for (ndice = 1 ; ndice <= 3 ; ndice++)
{
for (target = 1 ; target <= 20 ; target++)
{
printf(" %2i",ray[ndice][target]) ;
}
printf("\n") ;
}
exit(0) ;
}