方法一:
#include <stdio.h>
#define N 9 /*dos界面,N的值为1~12*/
int combi(int n, int r)
{/*返回n和r的组合数*/
int i;
int p = 1;
for(i = 1; i <= r; i++)
{
p = p * (n-i+1) / i;
}
return p;
}
void paint()
{
int n, r;
for(n = 0; n <= N; n++)
{
for(r = 0; r <= n; r++)
{
int i;/* 排版设定开始 */
if(r == 0)
{
for(i = 0; i <= (N-n); i++)
printf(" ");
}
else
{
printf(" ");
} /* 排版设定结束 */
printf("%3d", combi(n, r));
}
printf("\n");
}
}
int main()
{
paint();
return 0;
}
方法二
#include <stdio.h>
#define N 8
int main()
{
int i,j;
int a[N][N] = {0};
for (i=0; i<N; i++)
{
a[i][0] = 1; //第i行第1元素为1;
a[i][i] = 1; //第i行最后一个元素为1;
}
for (i=2; i<N; i++)
{//第0行与第1行的元素都是1,所以i从2开始循环
for (j=1; j<i; j++)
{//第i行第0个元素为1,最后一个元素为1,所以要处理的是1<=j<=i-1
a[i][j] = a[i-1][j-1] + a[i-1][j];
//第i行第j列的元素等于上一行与j列相邻的两个元素的和。
}
}
for(i=0; i<N; i++)
{//打印输出
for(j=0; j<N-i; j++)
{
printf(" ");
}
for (j=0; j<=i; j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
return 0;
}