杨辉三角简介
杨辉三角是中国数学史上的一个伟大成就。它是二项式系数在三角形中的一种几何排列。在欧洲叫被称为帕斯卡三角形。帕斯卡(1623-1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。
我们把行数定义为n,即第一行为n=1,第二行为n=2,以此类推。我们不难发现如下规律:
1.每行的第一个数字和最后一个数字为1;
2.从n=3开始,每个数等于它上方两个数之和,即第(n+1)行的第m个数等于第n行的第(m-1)个数和第m个数之和;
3.第n行的数字有n项,第m个数和第(n-m+1)个数相等。
接下来,我们先利用C语言的二维数组的相关知识,试着打印出一个10行直角杨辉三角吧。
10行直角杨辉三角
我们刚刚已经分析了杨辉三角的相关性质,接下来我们用C语言先来编写一个直角的杨辉三角。代码实现如下:
#include <stdio.h>
#define N 10
int main(void)
{
int arr[N][N] = { 0 };
int i = 0;
for (i = 0; i < N; i++)
{
int j = 0;
for (j = 0; j <= i; j++)
{
if ((0 == j) || (i == j))
arr[i][j] = 1;
else
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
printf("%4d", arr[i][j]);
}
printf("\n");
}
return 0;
}
输出结果如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
从直角三角形到等腰三角形的进阶
我们已经成功写出了直角杨辉三角。接下来,我们来试着在它的基础上修改一下代码,让它能打印出等腰杨辉三角。
我们之前用C语言写过打印金字塔图形的程序。想要打印出等腰的金字塔图形,就要找出一些规律,通过控制行与列来控制何时打印空格,何时打印星号。实现从直角杨辉三角到等腰杨辉三角的进阶也是同样的道理,我们要试图控制空格的输出,来达到等腰三角形的效果。
最终用C语言实现如下:
#include <stdio.h>
#define N 10
int main(void)
{
int arr[N][N] = { 0 };
int i = 0;
for (i = 0; i < N; i++)
{
int m = 0;
for (m = 0; m < N - i; m++)
printf(" ");
int j = 0;
for (j = 0; j <= i; j++)
{
if ((0 == j) || (i == j))
arr[i][j] = 1;
else
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
printf("%4d", arr[i][j]);
}
printf("\n");
}
return 0;
}
输出结果如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
写在最后
以上就是关于用C语言实现等腰杨辉三角的全部内容。如果有什么更好的想法,欢迎大家留言讨论。
我的邮箱:[email protected]
参考资料:百度百科【杨辉三角】(链接:link)