杨辉三角就是像下面数列一样,通过观察,可以看到下一行的数据是上一行相邻数的和。我们就可以根据这个规律来写代码。
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
先定义一个数组arr[20][20],来表示这些数。可以看到第一行有1个数,第二行有两个数,那么低n行就有n个数,不能过于大。
1.首先确定数组的每一行最左边和最右边的1
for ( int i = 1; i <= n; i++)
{
arr[i][1] = arr[i][i] = 1;
}
2.再确定数组中间的部分,从第三行第二列出发打印,也就是下一行是上一行相邻数的和,
for (i = 3; i <= n; i++)//从第三行第二列开始打印数组内部内容
{
for (j = 2; j <= i-1; j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
3.开始打印之前,我们可以把它弄得更好看一些,即三角形形状的。后面的数越来越大,占得位越来越多,所以我们可以提前设置打印的数占6位。观察下图我们可以看到如果只打印2行,第一行就打印3个空格,只打印4行,第一行就打印3*3个空格,只打印5行就打印4*3个空格,所以打印n行的话就打(n-1)*3个空格,代码如下
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i;j++)
{
printf(" ");//因为下面是printf("%6d", arr[i][j]);所以是3个空格
}
for (j = 1; j <= i; j++)
{
printf("%6d", arr[i][j]);
}
printf("\n");
}
完整代码如下所示:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=0;//代表要打印的行数,尽量不要太大,会影响打印效果
while (n <= 0 || n >= 14)//限制行数,避免影响打印效果
{
printf("请输入需要打印的行数:");
scanf("%d", &n);
}
int i = 1; int j = 1; //i控制行,j控制列
int arr[20][20] = { 0 };
for ( i = 1; i <= n; i++)
{
arr[i][1] = arr[i][i] = 1;//令两边的数都为1令最左边的arr[i][1]=1,最右边的arr[i][i]=1
}
for (i = 3; i <= n; i++)//从第三行第二列开始打印数组内部内容
{
for (j = 2; j <= i-1; j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i;j++)
{
printf(" ");//因为下面是printf("%6d", arr[i][j]);所以是3个空格
}
for (j = 1; j <= i; j++)
{
printf("%6d", arr[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}