1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 5 1
. . . . . . . . . .
规律:
1.第一行以及主对角线均为1
2.当前值=上一行前一列+上一行同列
二维数组实现:
思路解析:
1.第一行以及主对角线均为1
arr[0][n]=0;arr[i][i]=0
2.当前值=上一行前一列+上一行同列
arr[i][j]=arr[i-1][j-1]+arr[i-1][j]
//杨辉三角二维数组实现
#include<stdio.h>
#define MAX 10
int main()
{
int arr[MAX][MAX];
for(int i=0;i<MAX;i++)
{
for(int j=0;j<=i;j++)
{
if(j==0||i==j)
arr[i][j]=1;
else
arr[i][j]=arr[i-1][j-1]+[i-1][j];
printf("%-4d",arr[i][j]);
}
printf("\n");
}
}
一维数组实现:
思路解析:
每一行数据直接在本数组内更新
例如第三行 1 2 1
第四行的 1 3 3 1,是在第三行1 2 1的基础上得到的
我们试着从前向后找规律:
第三行 1 2 1
第四行 1 1+2=3 ● 1
第五行 1
●处应为紫色2+1得到的3,但此时发现,第四行的第二个数据将原有数据更新为3,2已经无法使用,由此发现,从前向后无法继续更新数据
从后向前找规律:
好处:每次会更新主对角线1
第三行 1 2 1
第四行 1 2 1 1
1 2+1=3 1+2= 3 1
第五行 1 3 3 1 1
1 3 +1 =4 3+3=6 3+1=4 1
代码实现:
//一维数组实现杨辉三角
#include<stdio.h>
#define MAX 10
int main()
{
for(int i=0;i<MAX;i++)
{
for(int j=i;j>=0;j--)//从后向前遍历
{
if(j==0||j==i)
{
arr[j]=1;
}
else
{
arr[j]+=arr[j-1];
}
printf("%-4d",arr[j]);
}
}
}
如有错误欢迎评论区告诉我,谢谢❤