前言
本文整理了几种打印杨辉三角的方法,包括非等腰形式打印和等腰形式打印
主要思路
杨辉三角的打印的解决分为两步
- 把数据储存到数组
- 按格式打印
如何生成数据
杨辉三角的数据应该用数组储存,
可以用二维数组储存,如下
各个元素利用递推公式arr[i][j]=arr[i-1][j]+arr[i-1][j-1]生成
这里需要注意的地方是
- 数组使用前必须初始化(上图中空白的三角的数据是0)
- i-1,j-1可能导致数组越界,解决方案是先把第一列全部赋值为1再用递推公式(有的方法会把第一列和对角线都先赋值为1再从第三行第二列开始填数据,其实没必要)
- 由于递推关系式只与前一行有关,数据其实可以用一维数组保存,需要注意的是为什么从后往前生成数据,详见代码注释
格式打印
注意三点
- 打印空格的规律从最后一行以及每行之间空格数的关系找
- 由于数据位数,需要控制字段宽度
- 打印完一个数字,需要在其后打印相应的空格
代码
非等腰
法一
void yangHuiTriangle(int n)
{
int data[30][30] = {
1 }; //第一行直接填好,播下种子
int i, j;
for (i = 1; i < n; i++) //从第二行开始填
{
data[i][0] = 1; //每行的第一列都没有区别,直接给1,保证不会越界。
for (j = 1; j <= i; j++) //从第二列开始填
{
data[i][j] = data[i - 1][j] + data[i - 1][j - 1];