多维数组打印杨晖三角

根据用户输入的一个行数,然后打印出杨晖三角。

这里,我是想用数组打印出杨晖三角。首先,附上我的完整代码:

 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个数之和,这也是组合数的性质之一。

当然,杨晖三角还有其他性质,我并没有进行深入的研究。如果有其他想法,希望留言一起探讨。

原文地址:https://www.cnblogs.com/smuwgeg/p/9655785.html