1. 程式人生 > >多維陣列列印楊暉三角

多維陣列列印楊暉三角

根據使用者輸入的一個行數,然後打印出楊暉三角。

這裡,我是想用陣列打印出楊暉三角。首先,附上我的完整程式碼:

 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個數之和,這也是組合數的性質之一。

當然,楊暉三角還有其他性質,我並沒有進行深入的研究。如果有其他想法,希望留言一起探討。