Viết một hàm in ra một kim tự tháp với kí tự #. Hàm chấp nhận một số nguyên dương N, in ra kim tự tháp có N cấp với bên trái và bên phải mỗi cấp có những khoảng trắng như ví dụ sau:
pyramid(1) '#' pyramid(2) ' # ' '###' pyramid(3) ' # ' ' ### ' '#####'
Một kim tự tháp được hình dung với các row và column như sau:
Ta có một ma trận gồm 3×5 với 3 row và 5 column. Với n là số cấp( tương đương số row trong ma trận) của kim tự tháp thì chúng ta tính được số column. Ví dụ như sau:
Với n = 1 thì row = 1, column = 1
Với n = 2 thì row = 2, column = 3
Với n = 3 thì row = 3, column = 5
Với n = 4 thì row = 4, column = 7
…
Dựa theo nguyên tắc trên ta tìm được công thức tính column dựa trên n là: 2n – 1.
Tiếp theo giải thuật của chúng ta phải xác định với từng row, loop qua lần lượt column từ 0, 1, 2, …và xác định xem column nào dùng space hoặc dùng #. Bên cạnh đó ta cũng cần xác định điểm chính giữa của mỗi column là: số column/2.
Cuối cùng một giải thuật có thể như sau:
function pyramid(n){ const columns = 2*n -1;// số columns của pyramid for(let i = 0; i < n; i++) {// chạy qua từng row let step= '';// với mỗi row là một cấp của pyramid for(let j = 0; j < columns; j++) {//trên từng row, chạy qua từng column let middle = Math.floor(columns/2);// đây là điểm chính giữa của column hiện hành theo index if(middle - i <= j && middle + i >= j) {// nếu column index thuộc đoạn [middle - i, middle + i] dùng # step += '#' } else {//ngược lại dùng khoảng trắng step += ' ' } } console.log(step); } }