Login Register


[C] Pascals Triangle Generation filter_list
Author
Message
[C] Pascals Triangle Generation #1
Here's a method I wrote for generating numbers that make up the sequence for Pascal's Triangle. You can find more information about Pascal's Triangle here: [url][/url]

Code:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SWAP(x, y) ( \ ((x) ^= (y)), \ ((y) ^= (x)), \ ((x) ^= (y)) \ ) size_t nCr(size_t n, size_t r) { size_t m = n - r; if (m > r) { SWAP(m, r); } size_t f[] = {1, 1}; size_t i = r + 1; for (; i <= n; ++i) f[0] *= i; for (i = 2; i <= m; ++i) f[1] *= i; return f[0] / f[1]; } size_t **PascalsTriangle(size_t num_rows) { size_t **triangle = malloc(sizeof(size_t) * num_rows); size_t b = 1; for (size_t i = 0; i < num_rows; ++i) { triangle[i] = malloc(sizeof(size_t) * b); triangle[i][0] = triangle[i][b - 1] = 1; for (size_t j = 1; j < b - j; ++j) { triangle[i][j] = triangle[i][b - j - 1] = nCr(i, j); } ++b; } return triangle; } int main() { const int num_rows = 10; size_t **pascals_triangle = PascalsTriangle(num_rows); for (int i = 0; i < num_rows; ++i) { for (int j = 0; j < i + 1; ++j) { printf("%d ", pascals_triangle[i][j]); } free(pascals_triangle[i]); printf("\n"); } free(pascals_triangle); }

Result:
Code:
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 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1

Reply





Messages In This Thread
[C] Pascals Triangle Generation - by 0xDEAD10CC - 03-02-2014, 01:07 AM



Users browsing this thread: