第一步:找规律
数字规律:
直观看出三角形的两边都是 1 ,每一行的数的个数等于该行行数。(从第三行开始)被两边的 1 包围着的数据中,每个数等于它上一行前一列的数和上一行本列数之和。
“三角形”效果:
打印出三角形效果就要在每行开始先打印空格,依次为3、2、1、0,行号依次增加空格依次减少。每一行的相邻两个数字之间有一个空格。
思考:
数字规律和三角形效果都与行数有关,用二维数组操作。三角形的腰都是1,中间数据需要用到上一行的数据。所以整个代码分三步进行。第一步打印所有的1,第二步打印中间数据,第三步加空格以形成三角形效果。
第二步:代码实现(打印10行杨辉三角)
1、打印所有的1
#include<stdio.h>
int main()
{
int i = 0, j = 0;
int arr[10][10] = { 0 };//用10行10列的数组装数字并初始化为空
for (i = 0; i < 10; i++)
{
arr[i][0] = 1;//每行首元素设为1
arr[i][i] = 1;//每行最后一个元素设为1
}
for(i = 0; i < 10; i++)//打印出来看效果
{
for (j = 0; j <= i; j++)//j<=i是因为每行元素个数和行数相等
{
printf("%d", arr[i][j]);
}
printf("\n");
}
return 0;
}
2、打印中间数据
#include<stdio.h>
int main()
{
int i = 0, j = 0;
int arr[10][10] = { 0 };//用10行10列的数组装数字并初始化为空
for (i = 0; i < 10; i++)
{
arr[i][0] = 1;//每行首元素设为1
arr[i][i] = 1;//每行最后一个元素设为1
for (j = 0; j < i; j++) //j<=i是因为每行元素个数和行数相等
{
if (i > 1 && j > 0)//观察发现从第三行第二列开始,才有中间数据
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];//打印中间数据。原理见数字规律。
}
}
}
for(i = 0; i < 10; i++)//打印出来看效果
{
for (j = 0; j <= i; j++)//j<=i是因为每行元素个数和行数相等
{
printf("%d ", arr[i][j]);
}
printf("\n");//打印一行后换行
}
return 0;
}
3、加空格以形成三角形效果
#include<stdio.h>
int main()
{
int i = 0, j = 0;
int arr[10][10] = { 0 };//用10行10列的数组装数字并初始化为空
for (i = 0; i < 10; i++)//按行从左至右设置数组元素
{
j = 10 - i;//
while (--j)//第一行开始先打印9个空格,行号增加1,空格就减少1个
{
printf(" ");//一个空格
}
arr[i][0] = 1;//数组每行首元素设为1
arr[i][i] = 1;//数组每行最后一个元素设为1
for (j = 0; j <= i; j++) //j<=i是因为每行元素个数和行数相等
{
if (i > 1 && j > 0)//观察发现从第三行第二列开始,才有中间数据
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];//打印中间数据。原理见数字规律。
}
printf("%d ", arr[i][j]);//每一行相邻两个元素之间有一个空格。赋值完一行后直接打印。
}
printf("\n");//打印一行后换行
}
return 0;
}
第三步:优化三角形效果
#include<stdio.h>
int main()
{
int i = 0, j = 0;
int arr[10][10] = { 0 };//用10行10列的数组装数字并初始化为空
for (i = 0; i < 10; i++)//按行从左至右设置数组元素
{
j = 10 - i;//
while (--j)//第一行开始先打印9个空格,行号增加1,空格就减少1个
{
printf(" ");//因为最大数为3位数,所以三个空格打印出来更加美观。每一行相邻两个元素之间有3个空格,这样更加美观。
}
arr[i][0] = 1;//数组每行首元素设为1
arr[i][i] = 1;//数组每行最后一个元素设为1
for (j = 0; j <= i; j++) //j<=i是因为每行元素个数和行数相等
{
if (i > 1 && j > 0)//观察发现从第三行第二列开始,才有中间数据
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];//打印中间数据。原理见数字规律。
}
printf("%3d ", arr[i][j]);//每一行相邻两个元素之间有3个空格,这样更加美观。赋值完一行后直接打印。
}
printf("\n");//打印一行后换行
}
return 0;
}