Here is the C program to find the value of nPr and nCr. nPr is the number of ways of obtaining an ordered subset of r elements from a set of n elements. Parameter n stands for the number of items in the complete set whereas r stands for the number of items you want to select.
In other words, nPr means number of ways you can select r items from set of n items where order makes difference.
Where n!, denotes the factorial of a number, it is the product of all positive integers less than or equal to n. Factorial does not exist for negative numbers and factorial of 0 is 1. Its most basic occurrence is the fact that there are n! ways to arrange n distinct objects into a sequence. Hence, to calculate nPr, we have to calculate factorial of n and (n-r) and divides them as per above expression.
Before proceeding, I will recommend to check Factorial program first : Factorial Program in C
C program to find nPr using function
In this program we first take n and r as input form user. As per definition of nPr, n >= r. Which means, If a set contains n items then you cannot select more than n items from that set. Here we are using a user defined function getFactorial(N), which takes a number as input and return its factorial value. Function getNPR calls getFactorial function to calculate numerator and denominator or nPr expression.
#include <stdio.h>
int getFactorial(int N);
int main(){
int n, r, nPr;
printf("Enter n and r for nPr calculation\n");
scanf("%d %d",&n, &r);
nPr = getNPR(n, r);
if(nPr == -1){
printf("Invalid Input: n must be >= r\n");
} else {
printf("%dP%d = %d\n", n, r, nPr);
}
return 0;
}
int getNPR(int n, int r){
if(r > n){
/* Invalid Input, n must be >= r */
return -1;
}
return getFactorial(n)/getFactorial(n - r);
}
int getFactorial(int N){
if(N < 0){
printf("Invalid Input");
return 0;
}
int nFactorial = 1, counter;
/* N! = N*(N-1)*(N-2)*(N-3)*.....*3*2*1 */
for(counter=1;counter <= N;counter++){
nFactorial = nFactorial * counter;
}
return nFactorial;
}
Output
Enter n and r for nPr calculation 6 2 6P2 = 30
C program to find nCr using a function
nCr means number of ways you can select r items from set of n items where order makes no difference. It defines, IN how many ways we can select a small group from a larger group.
For Example:
In how many ways you can select a group of five employees from an office of 20 employees.
Points to Remember
- If the order doesn't matter, it is a Combination.
- If the order does matter it is a Permutation.
nCr = nPr/r!
#include <stdio.h>
int getFactorial(int N);
int main(){
int n, r, nCr;
printf("Enter n and r for nCr calculation\n");
scanf("%d %d",&n, &r);
nCr = getNCR(n, r);
if(nCr == -1){
printf("Invalid Input: n must be >= r\n");
} else {
printf("%dC%d = %d\n", n, r, nCr);
}
return 0;
}
int getNCR(int n, int r){
if(r > n){
/* Invalid Input, n must be >= r */
return -1;
}
return getFactorial(n)/(getFactorial(r)*getFactorial(n - r));
}
int getFactorial(int N){
if(N < 0){
printf("Invalid Input");
return 0;
}
int nFactorial = 1, counter;
/* N! = N*(N-1)*(N-2)*(N-3)*.....*3*2*1 */
for(counter = 1,; counter <= N; counter++){
nFactorial = nFactorial * counter;
}
return nFactorial;
}
Output
Enter n and r for nCr calculation 6 2 6C2 = 15
Related Topics