多維陣列列印楊暉三角
阿新 • • 發佈:2018-12-10
根據使用者輸入的一個行數,然後打印出楊暉三角。
這裡,我是想用陣列打印出楊暉三角。首先,附上我的完整程式碼:
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個數之和,這也是組合數的性質之一。
當然,楊暉三角還有其他性質,我並沒有進行深入的研究。如果有其他想法,希望留言一起探討。