最近在书上发现了一个打印杨辉三角前8行的代码,刚开始以为不是很难,结果打印的时候就出了一堆问题,这里写出详细过程。

首先介绍下什么是杨辉三角(一图胜千言)

将数学中的杨辉三角给打印出来(因为不认真看书引发的一个错误导致的连续反应)_for循环

简单介绍下规律:第2行的2=1+1,3=1+2,4=1+3...

(用数组就是a[i][j]=a[i-1][j-1]+a[i-1][j],这就是代码实现的关键点)

我开始没有仔细看,回宿舍就靠印象写了一遍


将数学中的杨辉三角给打印出来(因为不认真看书引发的一个错误导致的连续反应)_自定义_02

结果答案出乎意料

将数学中的杨辉三角给打印出来(因为不认真看书引发的一个错误导致的连续反应)_杨辉三角_03

然后我就很奇怪,到底是哪里出了问题。

分析代码,我就发现好像我的a[0][1]都被打印出来了,这样就肯定是出现哪个问题了。

首先我把重点放在了for循环的过程,于是我测试了一下,得出一些重要结论(我之前没有深刻理解for循环),对于嵌套for循环,这里如果if不满足就直接else了,所以

将数学中的杨辉三角给打印出来(因为不认真看书引发的一个错误导致的连续反应)_自定义_04不加括号也是可以的。

然后测试了一下嵌套for循环打印的数字

将数学中的杨辉三角给打印出来(因为不认真看书引发的一个错误导致的连续反应)_嵌套_05

果然,01都被打印出来了,意味着a[0][1],a[0][2]这些都出来了...

显然不符合杨辉三角的打印。

然后就是要限制i=0时候,j只能=0;i=1,j只能=0或1...

然后我就把灵光一闪,把第二个for循环的条件改成了j<8-(7-i),这样就可以限制了

将数学中的杨辉三角给打印出来(因为不认真看书引发的一个错误导致的连续反应)_for循环_06

......然后我回过头仔细看了书,发现书上是j<=i,和我的j<8-(7-i)是一个意思........

不仔细看书的后果...


书上是只打印杨辉三角的8行,我想了一下能不能打印自定义的行数呢,但是数组内不能输入变量,但是我找到一个勉强能用的办法(不能打印n行,但是差不多够用了)

将数学中的杨辉三角给打印出来(因为不认真看书引发的一个错误导致的连续反应)_数组_07

其实,超过20行的杨辉三角数字就特别大了,数字还有个问题就是打印的占位符不太够用,会挤在一起,不太好看。有兴趣可以玩一下。


看来,认真看书还是特别有必要的,代码必须弄明白里面的核心内容,不能只记个大概,不然就会像今天这样,出现一系列的问题。


如有不对,欢迎指正。