Primero va una muestra del cálculo del trangulo de Pascal de base N=10
1 1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9
1 3 6 10 15 21 28 36
1 4 10 20 35 56 84
1 5 15 35 70 126
1 6 21 56 126
1 7 28 84
1 8 36
1 9
1
Y ahora uno de N=20. Quizás puedas no apreciarla dependiendo de la distorsión que pueda ocasionar la resolución de carcateres.
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171
1 4 10 20 35 56 84 120 165 220 286 364 455 560 680 816 969
1 5 15 35 70 126 210 330 495 715 1001 1365 1820 2380 3060 3876
1 6 21 56 126 252 462 792 1287 2002 3003 4368 6188 8568 11628
1 7 28 84 210 462 924 1716 3003 5005 8008 12376 18564 27132
1 8 36 120 330 792 1716 3432 6435 11440 19448 31824 50388
1 9 45 165 495 1287 3003 6435 12870 24310 43758 75582
1 10 55 220 715 2002 5005 11440 24310 48620 92378
1 11 66 286 1001 3003 8008 19448 43758 92378
1 12 78 364 1365 4368 12376 31824 75582
1 13 91 455 1820 6188 18564 50388
1 14 105 560 2380 8568 27132
1 15 120 680 3060 11628
1 16 136 816 3876
1 17 153 969
1 18 171
1 19
1
Puedes computar tritangulos de base hasta N=30, pero a no ser que tengas una resolucion suficiente en el terminal de caracteres por pantalla, las figuras saldran sin formatear, y el efecto del trangulo se puede perder... Cuidado también con N altos porque los enteros se pueden salir de rango y acabar en negativos... usar unsigned long....
Y este es el código que lo resuelve... Ah!, empecé a hacerlo en C++, pero con pocos cambios puedes pasarlo a C.
#include <iostream> // cin, cout
#include <iomanip> // setw
using namespace std;
#define MAX 1000
// P : N > 0
// Q : \forall ii,jj : 0 <= ii,jj < N : M[ii][jj]=C(ii+1,jj+1)
// I : i > 0 -> \forall jj : 0 <= jj < N : M[i-1][jj]=C(i-1,jj)
// Inner loop
// I2 : \forall jj : 0 <= jj < j : M[i][jj]=C(i+1,jj+1)
// and
// acum = i>0 -> acum= \sum k:0<=k<j: M(i-1,k)
// where C(i,j) is combinatory number
// C(1,j) = 1
// C(i+1,j) = \sum k:1<=k<=j: C(i,k)
void pascal(int M[][MAX], const int N)
{
int acum;
int i,j;
for ( i=0; i<N ; i++)
for ( j=acum=0; j< N-i ; j++)
if (i==0)
M[i][j]= 1;
else
{
acum += M[i-1][j];
M[i][j] = acum;
}
return;
}
int main(int argc, char **args)
{
int N;
int M[MAX][MAX];
cin >> N ;
pascal(M,N);
for (int i=0; i < N ; i++)
{
for (int j=0; j < N-i ; j++)
cout << setw(5) << M[i][j] << " " ;
cout << endl;
}
return 0;
}