杨辉三角是个经典的问题,其形式为:
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语言编写一个程序来使其输出这个杨辉三角。
#include<stdio.h>
#define N 10 //限定杨辉三角的行数,这里以取10行为例
int main()
{
int i,j;
int a[N][N]; //定义一个10行10列的数组
for(i=0;i<=N-1;i++) //循环10次
{
a[i][0]=1; //将第 i+1 行第一列输出为 1
a[i][i]=1; //将第 i+1 行第 i+1 列输出为 1
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j]; //根据杨辉三角的数据之间的规律来列出的等式
}
}
for(i=0;i<=N-1;i++) //输出二维数组
{
for(j=0;j<=i;j++)
{
printf("%d ",a[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
上面的代码较为简单,也更容易理解。但是我们要在上面代码的基础上进行改进。
等边的杨辉三角:
#include<stdio.h>
#define N 10
int main()
{
int i,j;
int a[N][N];
//该步骤跟上述代码相同,不在过多解释。
for(i=0;i<=N-1;i++)
{
a[i][0]=1;
a[i][i]=1;
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<=N-1;i++)
{
for(j=0;j<=N-1-i;j++)
printf(" "); //这一步要注意
for(j=0;j<=i;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
可以看见该代码跟第一个相比多了一步:
for(j=0;j<=N-1-i;j++)
printf(" ");
这一步的目的是在每一行数据之前输出 空格 ,以此来实现“等边”的形状。但是所留空格数是有变化的,每行有 N-1 个空格。
我们来运行一下:
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
这样就实现了杨辉三角的等边输出。明白了吗?