假设打印9行
首先我们可以分析一下:
杨辉三角的形式为 :
1
1 1
1 2 1
……
可以看出如果只有3行的话 , 第一行的1前面就有3个空格,第二行的1后面就有2个空格,以此类推。
而每两个数之间也有一个空格。所以我们可以用二维数组的形式先输出:
1
11
121
……
然后再加入空格。可以看出没一行的第一个数都是1,并且对角线上也都是1(可以看成为下三角行列式),所以我们可以直接从第三行开始,并且可以看出来从第三行开始不为1的数就等于上一行前面两个数之和(例:2=1+1)。以下就为该方法的代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<windows.h>
#include<stdio.h>
int main()
{
int arr[9][9] = { 0 };
int i, j, k;
{i表示的是行数,j表示的是列数}
for (i = 0; i < 9; i++)
{
for (k = 9 – i; k > 0; k–)
{这里的操作为输出每一行1前面的空格}
{
printf(“%c”, ‘ ‘);
}
for (j = 0; j < 9; j++)
{
if (j == 0)
{这一部分输出的是每一行的第一个1}
{
arr[i][j] = 1;
}
if (i == j)
{这一部分输出的是对角线上的1}
{
arr[i][j] = 1;
}
if ((i>1) && (j > 0))
{这一部分输出的是第三行之后的其他数字}
{
arr[i][j] = arr[i – 1][j – 1] + arr[i – 1][j];
}
if (arr[i][j] == 0)
{因为是二维数组,所以我们不将0输出,即:遇0直接换行}
{
printf(“\n”);
break;
}
if (arr[i][j] != 0)
{这一部分为每个数之前都有一个空格}
{
printf(“%c”, ‘ ‘);
}
printf(“%2d”, arr[i][j]);
}
}
printf(“\n”);
system(“pause”);
return 0;
}
// 1
// 1 1
// 1 2 1
//1 3 3 1