杨辉三角(也称帕斯卡三角)相信很多人都不陌生,它是一个无限对称的数字金字塔,从顶部的单个1开始,下面一行中的每个数字都是上面两个数字的和。
“杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623—-1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。
就是这个看上去平平无奇的数字三角形,却有一些非常奇妙甚至是神秘的特性。
杨辉三角的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和,以此类推。
那我们该怎么打印杨辉三角呢?
但我们把每一行都对齐(如下),就像一个二维数组打印一样。
所以我们可以用二维数组存储杨辉三角
1
1 1
1 2 1
1 3 3 1
……
代码实现如下:
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
printf("请输入打印的行:");
scanf("%d",&n);
int** arr;
arr = (int**)malloc(n * sizeof(int*));
for (i = 0; i < n; i++)
{
arr[i] = (int*)malloc(n * sizeof(int));
}
for (i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < n - i; j++)
{
printf(" ");
}
for ( j = 0; j <= i; j++)
{
if (j == 0 || j == i)
{
arr[i][j] = 1;
}
else if(i>1 && j>0) {
arr[i][j] = arr[i - 1][j - 1] + arr[i-1][j];
}
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}