Giải chuyên đề Tin 12 Cánh diều Bài 3: Thực hành kiểu dữ liệu hàng đợi và ngăn xếp có đáp án
25 người thi tuần này 4.6 182 lượt thi 1 câu hỏi
🔥 Đề thi HOT:
15 câu Trắc nghiệm Tin học 12 Cánh diều Giới thiệu trí tuệ nhân tạo có đáp án
15 câu Trắc nghiệm Tin học 12 Cánh diều Mô hình và các giao thức mạng có đáp án
15 câu Trắc nghiệm Tin học 12 Chân trời sáng tạo Bài A1 có đáp án
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức có đáp án
Trắc nghiệm Tin học 12 Bài 1 (có đáp án): Một số khái niệm cơ bản
15 câu Trắc nghiệm Tin học 12 Chân trời sáng tạo Bài B1 có đáp án
15 câu Trắc nghiệm Tin học 12 Chân trời sáng tạo Bài B4 có đáp án
Trắc nghiệm Tin học 12 Bài 12 (có đáp án): Các loại kiến trúc của hệ cơ sở dữ liệu
Nội dung liên quan:
Danh sách câu hỏi:
Lời giải
a) Dựa trên cơ chế hoạt động vào trước ra trước của hàng đợi và vào sau ra trước của ngăn xếp (stack), em thiết kế thuật toán sử dụng một ngăn xếp và một hàng đợi (queue), để kiểm tra xem một xâu kí tự bất kì có tính chất đối xứng hay không như sau:
- Chuyển xâu kí tự về cùng một định dạng (chữ thường) và loại bỏ các kí tự không phải chữ cái hoặc số để tránh các yếu tố không cần thiết.
- Đưa từng kí tự của xâu vào cả ngăn xếp và hàng đợi.
- Lần lượt lấy từng kí tự ra từ ngăn xếp và hàng đợi và so sánh chúng. Nếu tất cả các kí tự lấy ra đều giống nhau, thì xâu kí tự có tính chất đối xứng, ngược lại thì không.
b) Viết hàm doixang(s) thực hiện thuật toán xây dựng được ở câu a) để kiểm tra xem xâu s có tính chất đối xứng hay không như sau:
from collections import deque
def clean_string(s):
return ''.join(char.lower() for char in s if char.isalnum())
def doixung(s):
cleaned_s = clean_string(s)
stack = []
queue = deque()
for char in cleaned_s:
stack.append(char)
queue.append(char)
while stack:
if stack.pop() != queue.popleft():
return False
return True
c) Viết chương trình hoàn thiện yêu cầu người sử dụng nhập vào một xâu kí tự, rồi gọi hàm doixung(s) để kiểm tra xâu nhập vào có tính chất đối xứng hay không và chạy chương trình với các xâu kí tự đã cho:
def main():
strings_to_test = ["-123454321", "112", "racecar"]
for s in strings_to_test:
if doixung(s):
print(f"'{s}' có tính chất đối xứng.")
else:
print(f"'{s}' không có tính chất đối xứng.")
user_input = input("Nhập vào một xâu kí tự: ")
if doixung(user_input):
print(f"'{user_input}' có tính chất đối xứng.")
else:
print(f"'{user_input}' không có tính chất đối xứng.")
if __name__ == "__main__":
main()
Kết quả thu được như sau:
"-123454321": có tính chất đối xứng.
"112": không có tính chất đối xứng.
"racecar": có tính chất đối xứng.