文章目录
前言
一、杨辉三角是什么?
1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ......
每个数等于它上方两数之和。
每行数字左右对称,即最右边最左边是1,由1开始逐渐变大。
二、思路
1将其右对齐
1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…
可以看出每行第一个数,即列下标为0的数都为1;
每行最后一个数即当行和列相等时为1;
而从第二行起,列不为0且行列下标不相等时,这个数等于它正上面那个数与正左上角那个数之和
即:arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
然后解决让右对齐变为居中:观察可以发现,若要打印n层,第一层需要先打印n个空格,第二行打印n-1个空格,以此类推即可。
代码:
#include<stdio.h>
#define N 34
int main()
{
int n = 0;
int arr[N][N] = { 0 };
scanf("%d", &n);
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
if (j == 0 || i == j)
{
arr[i][j] = 1;
}
else
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
for (i = 0; i < n; i++)
{
for (int k = 0; k < n - i; k++)
{
printf(" ");
}
for (j = 0; j <= i; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}