版本一
/**
* 杨辉三角
*
*0 1 2 3 4 5 6(index)
*0 1 0 0 0 0 0
*0 1 1 0 0 0 0
*0 1 2 1 0 0 0
*0 1 3 3 1 0 0
*0 1 4 6 4 1 0
*
* 由上述可知,则第i行第j列的值为A[i - 1][j - 1] + A[i - 1][j],其中A为存储所有值的二维数组
* 使用数组a1保存上一行的值,则第j的值等于a1[j - 1] + a1[j],使用a2用于临时存储当前行的所有列的值,
* 最后将a2的值赋值给a1即可
*/
void printYanghuiTriangle(int r) {
int a1[r + 2]; // 其中a[0],a[r + 1] 用于方便计算
int a2[r + 2];
int i, j;
for (i = 0; i < r + 2; i++) {
a1[i] = 0;
a2[i] = 0;
}
a1[1] = 1;
for (i = 1; i <= r; i++) {
for (j = 1; j <= i; j++) {
a2[j] = a1[j] + a1[j - 1];
printf("%d ", a2[j]);
}
for (j = 1; j <= i; j++)
a1[j] = a2[j];
printf("\n");
}
}
版本二
再加上些许的空格,即可变成理想的杨辉三角
void printYanghuiTriangleWithEmpty(int r) {
int *a1 = (int *) calloc(r + 2, sizeof(int)); // 其中a[0],a[r + 1] 用于方便计算
int *a2 = (int *) calloc(r + 2, sizeof(int));
int i, j, epmtyCount, numCount; //emptyCount统计每行需先打印几个空白,numCount统计打印几个数字
a1[1] = 1;
for (i = 1; i <= r; i++) {
epmtyCount = r - i;
numCount = i;
for (j = 1; j <= epmtyCount; j++)
printf(" ");
for (j = 1; j <= numCount; j++) {
a2[j] = a1[j] + a1[j - 1];
printf("%-3d ", a2[j]);
}
for (j = 1; j <= i; j++)
a1[j] = a2[j];
printf("\n");
}
free(a1);
free(a2);
}
有帮助记得点赞哦!