Đề bài: Viết chương trình in ra Tam giác Pascal với số hàng cho trước.
Ví dụ: Số hàng bằng 5 thì Tam giác Pascal sẽ được in ra như sau:
Input: n = 5
Output:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Tam giác Pascal cũng là một câu hỏi thường xuyên được các công ty lớn sử dụng khi thi tuyển lập trình viên. Trong bài viết này, Quản Trị Mạng sẽ cùng các bạn tìm hiểu cách viết chương trình in ra Tam giác Pascal bằng Python.
Cách 1: Sử dụng công thức nCr tức là n!/(n-r)!r!
Sau khi sử dụng công thức nCr, biểu diễn bằng hình ảnh trở thành:
0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
Thuật toán:
- Lấy một số hàng sẽ được in, giả sử nó là n.
- Thực hiện phép lặp ngoài i từ 0 tới n lần để in các hàng.
- Thực hiện phép lặp trong cho j từ 0 đến (N-1).
- In một khoảng trống "".
- Đóng vòng lặp bên trong (vòng lặp j) //cần thiết cho khoảng cách bên trái.
- Thực hiện phép lặp bên trong cho j từ 0 đến i.
- In nCr của i và j.
- Đóng vòng lặp bên trong.
- In ký tự xuống xòng (\n) sau mỗi lần lặp bên trong.
Dưới đây là code mẫu:
# Print Pascal's Triangle in Python
from math import factorial
# input n
n = 5
for i in range(n):
for j in range(n-i+1):
# for left spacing
print(end=" ")
for j in range(i+1):
# nCr = n!/((n-r)!*r!)
print(factorial(i)//(factorial(j)*factorial(i-j)), end=" ")
# for new line
print()
Cách 2:
Chúng ta có thể tối ưu hóa đoạn code trên bằng khái niệm Hệ số Nhị thức sau, mục thứ i trong một dòng là Hệ số Nhị thức C(line, i) và tất cả các dòng bắt đầu bằng giá trị 1. Ở đây, chúng ta phải thực hiện ý tưởng là tính toán C(line, i) bằng cách sử dụng C(line, i-1).
Code mẫu như sau:
# Print Pascal's Triangle in Python
# input n
n = 5
for i in range(1, n+1):
for j in range(0, n-i+1):
print(' ', end='')
# first element is always 1
C = 1
for j in range(1, i+1):
# first value in a line is always 1
print(' ', C, sep='', end='')
# using Binomial Coefficient
C = C * (i - j) // j
print()
Cách 3:
Đây là cách tối ưu nhất để in tam giác Pascal. Cách này dựa trên cơ sở lũy thừa của 11.
11**0 = 1
11**1 = 11
11**2 = 121
11**3 = 1331
Code mẫu như sau:
# Print Pascal's Triangle in Python
# input n
n = 5
# iterarte upto n
for i in range(n):
# adjust space
print(' '*(n-i), end='')
# compute power of 11
print(' '.join(map(str, str(11**i))))
Tuy nhiên, nhược điểm là phương pháp này chỉ áp dụng được ho đến n=5 mà thôi.
Quản Trị Mạng hy vọng rằng bài viết này sẽ có ích đối với bạn.