-
Permutation?
Code:
#include <stdio.h>
#include "Boolean.h"
#include "combinatorics.h"
#include <limits.h>
/* For all the functions below, return TRUE if the
calculation is successful, FALSE if overflow occurs
Return the calculated value in the pass by reference
parameter provided
*/
Boolean calcFactorial (int n, int* nfact)
{
*nfact = 1;
while(n > 0)
{
*nfact = *nfact * n;
n--;
}
if(*nfact < 0x7fffffff)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*
Combination means C(n,r) = n!/( r! * (n-r)! )
where C(n,r) is the number of r-element subsets of an n-element set.
Better formula derived from above is:
n ( n-1 ) ( n-2 ) ... ( n-r+1 )
C(n,r) = -------------------------------
r ( r-1 ) ( r-2 ) ... (3)(2)(1)
Return True if calculation is successful. False if
Overflow occurs.
*/
Boolean calcCNR( int n, int r, int* cnr )
{
#define min(n,r) (((n) < (r)) ? (n) : (r));
int multiplier = n;
int divisor = 1;
int k;
INT_MAX;
k = min(r, n - r);
//printf("n=%d, r=%d, k=%d\n", n, r, k);
*cnr = 1;
while (divisor <= k)
{
if(INT_MAX / multiplier < *cnr)
{
printf("Overflow detected\n");
return FALSE;
}
else
{
*cnr = ((*cnr * multiplier) / divisor);
//printf("Intermediate *cnr=%d\n", *cnr);
multiplier--;
divisor++;
}
}
return TRUE;
}
Boolean calcPNR( int cnr, int rfact, int* pnr )
{
}
here is my program so far for calculating factorials, combinations, and permutations. Can someone show me an algorithm or pseudocode to calculate the calcPNR(permuation) function please?
-