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ụ:

INPUTOUTPUTGIẢI THÍCH
92 3 -5 -4 -3 6 6 -1Xoá chữ số 0 từ danh sách vừa nhập
2 3 0 -5 -4 -3 6 6 -11 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)

You may also like...

0 0 đánh giá
Đánh giá bài viết
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
0
Bạn hãy viết bình luận cho nội dung này !x