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)