void YHTriangle(int Row)//参数传入打印的行数。
{
assert(Row > 0);
int i, j;
//按照给定的行数在堆空间上申请二维数组用来存放杨辉三角。
int **arr = (int **)malloc(sizeof(int *)*Row);
for (i = 0; i < Row; i++)
{
arr[i] = (int *)malloc(sizeof(int)*Row);
memset(arr[i], 0, sizeof(arr[i]));
}
assert(NULL != arr);
//初始化
arr[0][0] = 1;//初始化第一行的数据。
int CurrentRow = 1;//从第二行开始初始化二维数组//Current表示正在处理的当前行
for (i = 1; i < Row; i++)
{
//每行第一个和最后一个都是1
arr[i][0] = 1;
arr[i][CurrentRow] = 1;
for (j = 1; j < CurrentRow; j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];//除了第一个和最后一个元素,其余的值都为上一行相邻的俩个元素之和。
}
CurrentRow++;//当前行加1
}
//打印二维数组就是杨辉三角
CurrentRow = 1;
int SaveRow = Row;//保存当前行的值,用于打印制表符
int k;
for (i = 0; i < Row; i++)
{
for (k = 0; k < SaveRow - 1; k++)printf("\t");//为了更加直观的看到杨辉三角的格式。
for (j = 0; j < CurrentRow; j++)
{
printf("\t%d\t", arr[i][j]);
}
printf("\n");
SaveRow--;
CurrentRow++;
}
//释放空间
for (i = 0; i < Row; i++)
{
free(arr[i]);
}
free(arr);
}
运行结果: