C Program to find Value of nPr and nCr

  • Write a 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.

nPr = n!/(n-r)!

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.

C program to find nCr using a function

/*
* C Program to find nPr using function
*/
#include <stdio.h>
#include <conio.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);
    }
     
    getch();
    return 0;
}
 
/*
 * Function to calculate nPr 
 * nPr = n!/(n-r)!
 */
 int getNPR(int n, int r){
     if(r > n){
         /* Invalid Input, n must be >= r */
         return -1;
     }
     return getFactorial(n)/getFactorial(n - r);
 }
/*
 * Function to calculate factorial of a number 
 */
int getFactorial(int N){
    if(N < 0){
        printf("Invalid Input");
        return 0;
    }
    int nFactorial, counter;
    /*  N! = N*(N-1)*(N-2)*(N-3)*.....*3*2*1  */
    for(counter = 1, nFactorial = 1; counter <= N; counter++){
        nFactorial = nFactorial * counter;
    }    
    return nFactorial;
}

Program 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 = n!/(r!*(n-r)!)
nCr = nPr/r!

If you have nPr, then divide it with r! to get nCr.

C program to find nCr using a function 1

/*
* C Program to find nCr using function
*/
#include <stdio.h>
#include <conio.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);
    }
     
    getch();
    return 0;
}
 
/*
 * Function to calculate nPr 
 * nCr = n!/r!*(n-r)!
 */
 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));
 }
/*
 * Function to calculate factorial of a number 
 */
int getFactorial(int N){
    if(N < 0){
        printf("Invalid Input");
        return 0;
    }
    int nFactorial, counter;
    /*  N! = N*(N-1)*(N-2)*(N-3)*.....*3*2*1  */
    for(counter = 1, nFactorial = 1; counter <= N; counter++){
        nFactorial = nFactorial * counter;
    }    
    return nFactorial;
}

Program Output

Enter n and r for nCr calculation
6 2
6C2 = 15