Blaise Pascal là một nhà toán học người Pháp. Mặc dù tam giác Pascal được đặt theo tên của ông, một người sống ở thế kỉ XVII, nhưng thực tế nó đã được nghiên cứu từ rất lâu về trước, ở nhiều quốc gia khác nhau. Bằng tam giác này, em có được hệ số của các hạng tử trong nhị thức (a + b)" (nằm trên dòng thứ 7 của tam giác).
Công thức của tam giác này rất đơn giản: C(i, j) = C(i – 1,j) + C − 1, j − 1) với C(i, j) là kí hiệu cho ô ở dòng i, cột j (đây cũng là tổ hợp số cách chọn ra j phần tử từ một tập hợp có i phần tử).
Theo định nghĩa, ta cũng có C(i, 0) = C(i, i) = I.
Hãy quan sát các dòng 0, 1, 2, 3, 4, 5 của tam giác Pascal:
Yêu cầu: Nhập vào số nguyên n, hãy in ra dòng thứ n của tam giác Pascal. Dữ liệu: Nhập từ thiết bị vào chuẩn, một dòng duy nhất chứa số nguyên n. Két quả: Hiển thị ở thiết bị ra chuẩn, chứa n + 1 số nguyên là dòng thứ n của tam giác Pascal.
Blaise Pascal là một nhà toán học người Pháp. Mặc dù tam giác Pascal được đặt theo tên của ông, một người sống ở thế kỉ XVII, nhưng thực tế nó đã được nghiên cứu từ rất lâu về trước, ở nhiều quốc gia khác nhau. Bằng tam giác này, em có được hệ số của các hạng tử trong nhị thức (a + b)" (nằm trên dòng thứ 7 của tam giác).
Công thức của tam giác này rất đơn giản: C(i, j) = C(i – 1,j) + C − 1, j − 1) với C(i, j) là kí hiệu cho ô ở dòng i, cột j (đây cũng là tổ hợp số cách chọn ra j phần tử từ một tập hợp có i phần tử).
Theo định nghĩa, ta cũng có C(i, 0) = C(i, i) = I.
Hãy quan sát các dòng 0, 1, 2, 3, 4, 5 của tam giác Pascal:

Yêu cầu: Nhập vào số nguyên n, hãy in ra dòng thứ n của tam giác Pascal. Dữ liệu: Nhập từ thiết bị vào chuẩn, một dòng duy nhất chứa số nguyên n. Két quả: Hiển thị ở thiết bị ra chuẩn, chứa n + 1 số nguyên là dòng thứ n của tam giác Pascal.

Quảng cáo
Trả lời:
- Quan sát công thức, ta thấy C(i, j) phụ thuộc vào hai ô ở dòng i – 1. Vậy em có thể tính từng dòng một của tam giác và thêm dần vào mảng hai chiều C. - Quan sát đoạn chương trình ở Cách 1, ta thấy C được khai báo là kiểu danh sách (dấu []), nên các phần tử không cần phải giống nhau về kiểu dữ liệu. Em có thể thấy các phần tử của C (các dòng của bảng) có kích thước khác nhau (dòng thứ i có chứa đúng i số).
Một hướng làm khác giúp tiết kiệm bộ nhớ hơn, đó là sử dụng hai mảng (n + 1)(n+2) một chiều thay vì dùng cả bảng có kích thước vào khoảng 2 Làm được như vậy vì trong công thức ta chỉ cần quan tâm tới dòng i − 1 và dòng i.
Chương trình mẫu:
Cách 1:

Cách 2:

Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Đang tải chế độ Học...
Hot: 1000+ đề thi giữa kì 1 lớp 1-12 đầy đủ các môn (Update 2026) (chỉ từ 60k). Tải ngay
Đăng ký VIP để học và luyện thi không giới hạn
Trọn bộ quyền lợi trên Vietjack, trong một tài khoản.
- Phòng luyện thi cấp tốc: ĐGNL - ĐGTD, Tốt nghiệp THPT, Ôn vào 10, Ôn vào 6, Ôn Giữa kì/Cuối kì
- Hơn 200K đề thi thử, đề minh hoạ, chính thức các năm
- Với 3tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
- Tải xuống đề thi [DOCX] với đầy đủ đáp án
- Xem hàng ngàn bài giảng đính kèm củng cố thêm kiến thức
- Bao gồm tất cả các bậc từ Tiểu học đến Đại học
- Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện
- Đăng ký ngay
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Em có thể xem bản chất của mảng hai chiều chính là một mảng gồm các mảng một chiều. Kết quả của chương trình đã cho là:
4
3
6
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Dễ thấy thời khoá biểu là một thông tin dạng bảng nên em có thể áp dụng mảng hai chiều.
- Cần phải điền nội dung vào trước, sau đó mới có cơ sở để tính độ rộng của cột và thực hiện in ra. Các thao tác này đều thực hiện được bằng hai vòng lặp for. Chương trình mẫu:
q = int(input())
TKB = [[""] * 8 for i in range (11)]
# Dòng 0 dành cho tiêu đề cột
TKB[0] = ["Tiet", "Hai", "Ba", "Tu", "Nam", "Sau", "Bay", "CN"]
# Cột 0 chứa tiêu đề dòng
for i in range (1,11):
TKB [i][0] = str(i)
for i in range (q):
a, b, c = input ().split()
a = int (a)
b = int (b)
TKB [a] [b-1] = C
# Vì đã có dòng 0 nên lấy [a] thay vì [a-1]
# Tương tự, vì cột 0 đầu tiên cũng đã có nội dung
# Nên lấy [b-1] thay vì [b-2]
doRong = [0] * 8
for i in range (11):
for j in range (8):
doRong [j] = max (doRong [j], len (TKB [i][j]) + 1)
for i in range (11):
for j in range (8):
print (TKB [i][j], end = "")
print (" "* (doRong [j] - len (TKB [i][j])), end = "")
print ()
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng ký để học cùng Vietjack. Hoàn toàn miễn phí!
Bằng việc đăng ký, bạn đồng ý với Điều khoản sử dụng và Chính sách bảo mật của Vietjack.





