實現效果:楊輝三角 即: 在這裡我將用到js中數組的知識來完成,我將用二維數組來儲存這個序列,其中外層數組儲存所有的值,裡層數組將儲存每一行的值。 我的思路是: 1.獲取用戶輸入要的行數。 2.創建二維數組併進行計算,優先計算出所需要的數值,並按行儲存,輸出之後效果如下: 3.對以上的數據,按照楊輝 ...
實現效果:楊輝三角
即:
提示用戶輸入要實現的楊輝三角行數: 請輸入楊輝三角的行數: 8 代碼實現後的效果如下: 1 1.1 1.2.1 1.3.3.1 1.4.6.4.1 1.5.10.10.5.1 1.6.15.20.15.6.1 1.7.21.35.35.21.7.1
在這裡我將用到js中數組的知識來完成,我將用二維數組來儲存這個序列,其中外層數組儲存所有的值,裡層數組將儲存每一行的值。
我的思路是:
1.獲取用戶輸入要的行數。
2.創建二維數組併進行計算,優先計算出所需要的數值,並按行儲存,輸出之後效果如下:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
3.對以上的數據,按照楊輝三角的要求進行調整格式,即在每行數字的前面增加相應的空格。
方法中的難點如下:
1.創建數組
眾所周知,js中創建的數組為一維數組,但是我要用二維數組才能完成,那麼就要用到js中的構造函數創建數組的方法創建一個偽二維數組,代碼如下:
let arr = []; //創建一維數組(用作外層,儲存所有數據) for(let i=0;i<lineCount;i++){ //lineCount 為變數,用於存儲用戶輸入的行數 arr[i]=new Array(i+1); //對每行創建一個長度為i+1的數組,用於存儲每行的數據 }
以上代碼中,二維數組長度給了i+1,實際上對應了楊輝三角的行數和當前行的數字數量相同的特征,給了長度,方便後面直接對其賦值。若不給長度,後面就要用push的方法增加,但是我不建議這樣做,如果用push增加數據進去,會造成增加的數據不便於後期計算(親測試驗過的,感興趣的小伙伴也可以自己實踐體會下)。
2.按照規律進行計算,楊輝三角的規律為:除了每行的第一個數和最後一個數為1外,中間的數為上一行的對應的兩個數相加的和。
for (let i = 0; i < lineCount; i++) { // 計算每個值裝進數組中 for (let j = 0; j <= i; j++) { if (j == 0 || j == i) { //每行第1個和最後1個值為1 arr[i][j] = 1; } else { arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; //計算和值,本行的值是上1行對應列的數與其前一個數相加的結果 } } }
3.添加空格。每行的空格數為 lineCount- i - 1個,並輸出
for (let i = 0; i < lineCount; i++) { // 添加空格 nbsp = ''; for (let j = 0; j < lineCount - i - 1; j++) { nbsp += ' '; } console.log(nbsp+arr[i]) }
完整的代碼如下:
let readline = require('readline-sync'); console.log('請輸入楊輝三角的行數:'); let line = ~~readline.question(''); // 1.先將楊輝三角做成如下形式 // 1 // 1 1 // 1 2 1 // 1 3 3 1 // 1 4 6 4 1 // 2.添加空格 // arr存儲所有的數據 let arr = [],nbsp = ''; // 創建二維數組,每行作為1個數組保存 for (let i = 0; i < line; i++) { arr[i] = new Array(i + 1); } for (let i = 0; i < line; i++) { // 計算每個值裝進數組中 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]; } } } for (let i = 0; i < line; i++) { // 添加空格 nbsp = ''; for (let j = 0; j < line - i - 1; j++) { nbsp += ' '; } console.log(nbsp+arr[i]) }
實際上這樣實現還存在一個問題,當要輸出的行過多的情況下,就會出現三角形逐漸偏斜的情況如下,影響美觀。我暫未想到辦法解決,若有興趣的小伙伴想到辦法可以留言探討。
請輸入楊輝三角的行數: 15 1 1.1 1.2.1 1.3.3.1 1.4.6.4.1 1.5.10.10.5.1 1.6.15.20.15.6.1 1.7.21.35.35.21.7.1 1.8.28.56.70.56.28.8.1 1.9.36.84.126.126.84.36.9.1 1.10.45.120.210.252.210.120.45.10.1 1.11.55.165.330.462.462.330.165.55.11.1 1.12.66.220.495.792.924.792.495.220.66.12.1 1.13.78.286.715.1287.1716.1716.1287.715.286.78.13.1 1.14.91.364.1001.2002.3003.3432.3003.2002.1001.364.91.14.1