![]() |
|
[C] Pascals Triangle Generation - Printable Version +- Sinisterly (https://sinister.ly) +-- Forum: Coding (https://sinister.ly/Forum-Coding) +--- Forum: C, C++, & Obj-C (https://sinister.ly/Forum-C-C-Obj-C) +--- Thread: [C] Pascals Triangle Generation (/Thread-C-Pascals-Triangle-Generation) |
[C] Pascals Triangle Generation - 0xDEAD10CC - 03-02-2014 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 |