多维数组打印杨晖三角
根据用户输入的一个行数,然后打印出杨晖三角。
这里,我是想用数组打印出杨晖三角。首先,附上我的完整代码:
1 let readline = require('readline-sync'); // 引包 2 console.log('请输入杨晖三角的行数:'); 3 let line = ~~readline.question(''); 4 let arr = [], str = ''; 5 for (let i = 0; i < line; i++) { 6 for (let j = 0; j < line - i - 1; j++) { 7 str += ' '; 8 } 9 // 求出多维数组里面的每个数组 10 for (let i = 0; i < line; i++) { 11 arr[i] = new Array(i + 1); 12 for (let j = 0; j <= i; j++) { 13 if (j == 0 || j == i) { 14 arr[i][j] = 1; 15 } else { 16 arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; 17 } 18 } 19 } 20 console.log(`${str + arr[i]}`) 21 str = ''; 22 arr = []; 23 }
打印杨晖三角,花费了我不少时间,可能是对多维数组理解的还不够透彻。来解释一下我的代码吧。
首先,是先求出多维数组里面的每个小数组的。这一步是可以求出最大的数组的所有项。这里我并没有将arr.join(''),原因是我后面会定义一个空字符串:str,来拼接空格和数组里面的每个数组。附上我的代码,如下:
// 求出多维数组里面的每个数组 for (let i = 0; i < line; i++) { arr[i] = new Array(i + 1); for (let j = 0; j <= i; j++) { if (j == 0 || j == i) { arr[i][j] = 1; } else { arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; } } }
console.log(arr);
其次,我再在多维数组的外面加了一层for循环,来确定打印的次数。如下:
for (let i = 0; i < line; i++) { // 里面是多维数组 }
然后确定了循环打印的次数,然后我将进行空格的连接,这里我定义了str空字符串,然后每当循环一次的时候,要清空这个字符串。如下:
for (let i = 0; i < line; i++) { for (let j = 0; j < line - i - 1; j++) { str += ' '; } // 多维数组 console.log(`${str + arr[i]}`); str = ''; arr = []; }
以上,利用多维数组便将杨晖三角的效果打印出来了。
- 利用的主要的杨晖三角的规律:
每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第line+1行的第i个数等于第line行的第i-1个数和第i个数之和,这也是组合数的性质之一。
当然,杨晖三角还有其他性质,我并没有进行深入的研究。如果有其他想法,希望留言一起探讨。