13/04/2025
Làm sao để có câu trả lời hay nhất?
13/04/2025
13/04/2025
Python
def tim_vi_tri_dau_tien_day_con(A, p, q, s):
"""
Tìm vị trí đầu tiên trong dãy A mà 3 số hạng liên tiếp có giá trị là p, q, s.
Args:
A: Dãy số bất kì (list).
p: Giá trị số hạng thứ nhất trong dãy con cần tìm.
q: Giá trị số hạng thứ hai trong dãy con cần tìm.
s: Giá trị số hạng thứ ba trong dãy con cần tìm.
Returns:
Vị trí (index) đầu tiên của phần tử p trong dãy A nếu tìm thấy dãy con p, q, s.
Trả về -1 nếu không tìm thấy mẫu.
"""
n = len(A)
if n < 3:
return -1 # Không đủ 3 phần tử để tạo thành dãy con
for i in range(n - 2):
if A[i] == p and A[i + 1] == q and A[i + 2] == s:
return i # Trả về vị trí của phần tử p
return -1 # Không tìm thấy mẫu
# --- Chương trình chính ---
if __name__ == "__main__":
# Nhập dãy số A (ví dụ)
day_a = [4, 5, 1, 2, 3, 7, 8, 1, 2, 9, 1, 2, 3]
print(f"Dãy số A: {day_a}")
# Tìm vị trí đầu tiên của dãy con 1, 2, 3
p_tim = 1
q_tim = 2
s_tim = 3
vi_tri = tim_vi_tri_dau_tien_day_con(day_a, p_tim, q_tim, s_tim)
if vi_tri != -1:
print(f"Tìm thấy mẫu [{p_tim}, {q_tim}, {s_tim}] tại vị trí đầu tiên: {vi_tri} (tính từ 0)")
else:
print(f"Không tìm thấy mẫu [{p_tim}, {q_tim}, {s_tim}] trong dãy A.")
print("-" * 30)
# Tổng quát hóa với 3 số bất kì
p_tongquat = 5
q_tongquat = 1
s_tongquat = 2
vi_tri_tongquat = tim_vi_tri_dau_tien_day_con(day_a, p_tongquat, q_tongquat, s_tongquat)
if vi_tri_tongquat != -1:
print(f"Tìm thấy mẫu [{p_tongquat}, {q_tongquat}, {s_tongquat}] tại vị trí đầu tiên: {vi_tri_tongquat} (tính từ 0)")
else:
print(f"Không tìm thấy mẫu [{p_tongquat}, {q_tongquat}, {s_tongquat}] trong dãy A.")
Giải thích chương trình:
Hàm tim_vi_tri_dau_tien_day_con(A, p, q, s):
Nhận vào dãy số A và ba số hạng liên tiếp cần tìm p, q, s.
n = len(A): Lấy độ dài của dãy số A.
if n < 3:: Kiểm tra nếu dãy A có ít hơn 3 phần tử, thì không thể có 3 số hạng liên tiếp, trả về -1.
for i in range(n - 2):: Duyệt qua dãy A từ phần tử đầu tiên đến phần tử thứ n - 3. Chúng ta dừng ở n - 3 vì cần kiểm tra 3 phần tử liên tiếp A[i], A[i + 1], và A[i + 2].
if A[i] == p and A[i + 1] == q and A[i + 2] == s:: Kiểm tra xem ba phần tử liên tiếp tại vị trí i, i + 1, và i + 2 có giá trị lần lượt bằng p, q, và s hay không.
return i: Nếu điều kiện trên đúng, chúng ta đã tìm thấy vị trí đầu tiên của dãy con, trả về chỉ số i (vị trí của phần tử p).
return -1: Nếu vòng lặp hoàn thành mà không tìm thấy dãy con, trả về -1.
Phần chương trình chính (if __name__ == "__main__":):
Khởi tạo dãy số day_a: Đây là một ví dụ về dãy số bất kỳ. Bạn có thể thay đổi nó để kiểm thử với các dãy số khác nhau.
Tìm dãy con [1, 2, 3]:
Gán giá trị cho p_tim, q_tim, s_tim là 1, 2, 3 tương ứng.
Gọi hàm tim_vi_tri_dau_tien_day_con để tìm vị trí.
In ra thông báo kết quả dựa trên giá trị trả về của hàm.
Tổng quát hóa với dãy con [5, 1, 2]:
Gán giá trị cho p_tongquat, q_tongquat, s_tongquat là 5, 1, 2 tương ứng.
Gọi hàm tim_vi_tri_dau_tien_day_con để tìm vị trí.
In ra thông báo kết quả.
Cách sử dụng:
Sao chép đoạn mã Python trên vào một trình soạn thảo văn bản (ví dụ: Notepad, VS Code, PyCharm).
Lưu tệp với đuôi .py (ví dụ: tim_day_con.py).
Mở cửa sổ dòng lệnh hoặc terminal.
Di chuyển đến thư mục chứa tệp Python đã lưu.
Chạy chương trình bằng lệnh: python tim_day_con.py
Bạn có thể thay đổi giá trị của dãy số day_a và các giá trị p_tim, q_tim, s_tim (hoặc p_tongquat, q_tongquat, s_tongquat) để kiểm tra chương trình với các trường hợp khác nhau.
Nếu bạn muốn hỏi bài tập
Các câu hỏi của bạn luôn được giải đáp dưới 10 phút
CÂU HỎI LIÊN QUAN
Top thành viên trả lời