CÂU 4 – XỬ LÝ DANH SÁCH – PHẦN TỬ LIÊN TIẾP DÀI NHẤT
Nhập số nguyên dương n và danh sách gồm n số nguyên a0, a1, a2,… an-1. Thực hiện xoá số 0 tồn tại trong danh sách vừa nhập (nếu có). Sau đó đổi tất cả số nguyên dương thành 1 và số nguyên âm thành 0. Tìm dãy gồm các phần tử liên tiếp có giá trị đều bằng 0 và có nhiều phần tử nhất.
Ví dụ:
| INPUT | OUTPUT | GIẢI THÍCH |
| 9 | 2 3 -5 -4 -3 6 6 -1 | Xoá chữ số 0 từ danh sách vừa nhập |
| 2 3 0 -5 -4 -3 6 6 -1 | 1 1 0 0 0 1 1 0 | Đổi số nguyên + thành 1, số nguyên – thành 0 |
| Có 3 phần tử là 0 liên tiếp nhiều nhất |
Hướng dẫn:
# Khởi tạo số lượng phần tử muốn nhập vào
n = int(input("Nhập vào số phần tử: "))
L = []
M = []
# Thêm (duyệt) từng phần tử vào danh sách
for i in range(n):
L.append(int(input("Nhập phần tử thứ "+str(i+1)+": ")))
print("List vừa nhập vào là:",L)
# Duyệt) từng phần tử i trong danh sách L
for i in L:
# Nếu phần tử i khác 0 thì thêm phần tử đó vào danh sách mới M
if i!=0: M.append(i)
# nghĩa là ta loại đi các phần tử có giá trị 0 trong danh sách L
print("List xoá số 0 là:",M)
for doipt in range(len(M)):
if M[doipt]>0:
# Nếu phần tử i nguyên dương thì xoá nó và thêm vào ngay vị trí của
# số đó phần tử có giá trị là 1.
M.remove(M[doipt])
M.insert(doipt,1)
else:
# Nếu phần tử i nguyên âm thì xoá nó và thêm vào ngay vị trí của
# số đó phần tử có giá trị là 0.
M.remove(M[doipt])
M.insert(doipt,0)
print("List đổi số nguyên âm thành 0 và nguyên dương thành 1 là:",M)
# ------------------------------------------
# Tìm phần tử liên tiếp dài nhất bằng 0
# Sử dụng hai biến ptlt (phần tử liên tiếp) và tam (tạm) để:
# Biến ptlt lưu số p.tử của dãy các p.tử =0 liên tiếp và dài nhất, k.tạo=0
# Biến tam là số p.tử liền kề liên tiếp với phần tử hiện tại (đang xét) và bằng 0.
# Ví dụ: 0 1 0 0 1 0 1 0, có 2 pt liền kề liên tiếp bằng 0, tam = 2
# Lần lượt duyệt qua các phần tử trong danh sách khi gặp 1 thì tam = 0
# Khi gặp p.tử = 0 thì tăng biến tạm lên 1. Sau cùng ta dùng hàm max để tìm
# Số ptlt nhiều nhất giữa biến ptlt và tam. Kết quả gán lại cho ptlt là max(ptlt,tam)
ptlt = tam = 0
for x in M:
if x==0:
tam = tam + 1
ptlt = max(ptlt,tam)
else:
tam = 0
print("Số phần tử bằng 0 liên tiếp dài nhất là:",ptlt)


