Tuesday 3 September 2013

Pascal Triangle.


/*
    * ALGORITHM : Dynamic Programming.
    * Input size of triangle n.
    * Allocate a 2-D array of size nxn.
    * Recurrence relation C(n,k) = C(n-1,k-1) + C(n-1,k) 
    * Use 2-D matrix to store C(n,k) at arr[i][j].
    * Time complexity O(n2) and O(n) extra space.
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#define CLR(a) memset(a,0,sizeof a)
 
using namespace std;
void printSpaces(int sp)
{
    int i,j;
    printf("\n");
    for(i=0; i<sp; i++)
        printf(" ");
}
 
 
void binomialCoefficient(int n)
{
    int i,j;
    int arr[n+1][n+1];
    CLR(arr);
    for(i=0; i<=n;i++)
    {
        for(j=0;j<= n ;j++)
        {
            if( j ==0 || i == j)
                arr[i][j] = 1;
            else
                arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
        }
    }
    
    for(i=0;i<=n;i++)
    {
        printSpaces(n-i);
        for(j=0;j<=i;j++)
             printf("%d ",arr[i][j]);
    }
}
 
int main()
{
    int n;
    while(true)
    {
        scanf("%d",&n);
        if(n <= 0)
            break;
        binomialCoefficient(n);
    }
}
 
/*
OUTPUT
    1 
   1 1 
  1 2 1 
 1 3 3 1 
1 4 6 4 1 
     1 
    1 1 
   1 2 1 
  1 3 3 1 
 1 4 6 4 1 
1 5 10 10 5 1 
      1 
     1 1 
    1 2 1 
   1 3 3 1 
  1 4 6 4 1 
 1 5 10 10 5 1 
1 6 15 20 15 6 1 
*/


No comments:

Post a Comment