在打印类似杨辉三角这种问题的时候,我们首先要寻找相关的规律。
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
为了方便表述,我们把这个1表示为a[0][0]
第二行以此类推,分别是 a[1][0],a[1][1]
第三行是a[2][0],a[2][1],a[2][2].
通过观察我们可以发现
a[2][0]=a[1][-1]+a[1][0]=0+1=1
a[2][1]=a[1][0]+a[1][1]=1+1=2
a[2][2]=a[1][1]+a[1][2]=1+0=1
即:a[i][j]=a[i-1][j-1]+a[i-1][j]
于是代码如下
1 #include<stdio.h>
2 #define N 10//杨辉三角行数
3 //打印杨辉三角
4
5
6 int main()
7 {
8 int i = 0;//控制行数
9 int j = 0;//控制列数
10 int a[N][N] = {0};//初始化
11 for(i = 0 ; i < N ; i++)//行数
12 {
13 for(j = 0 ; j <= i ; j++)//每行的列数等于所在的行数
14 {
15 a[0][0]=1;//定义a[0][0]的值
16 a[i][j]=(a[i-1][j-1]+a[i-1][j]);
17 }
18 }
19 //打印杨辉三角
20 for(i=0;i<N;i++)//根据所在行数,打印他的列数
21 {
22 for(j = 0 ; j <= i ; j++)
23 {
24 printf("%d ",a[i][j]);
25
26 }
27 printf("\n");
28 }
29 return 0;
30 }
打印结果如下
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
当然,你也可以将之前打印的三角形的知识加进去,代码如下
1 #include<stdio.h>
2 #define N 5 //杨辉三角行数
3 //打印杨辉三角
4
5
6 int main()
7 {
8 int i = 0;//控制行数
9 int j = 0;//控制列数
10 int a[N][N] = {0};//初始化
11 for(i = 0 ; i < N ; i++)//行数
12 {
13 for(j = 0 ; j <= i ; j++)//每行的列数等于所在的行数
14 {
15 a[0][0]=1;//定义a[0][0]的值
16 a[i][j]=(a[i-1][j-1]+a[i-1][j]);
17 }
18 }
19 //打印杨辉三角
20 for(i=0;i<N;i++)//根据所在行数,打印他的列数
21 {
22 for(j = 0 ; j <= N-i ; j++)
23 {
24 printf(" ");
25 }
26 for(j = 0 ; j <= i ; j++)
27 {
28 printf(" %d ",a[i][j]);
29
30 }
31 printf("\n");
32 }
33 return 0;
34 }
打印结果如下
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1