Môn Tin họcQuản lý học tập Tin học

Sửa lỗi lệch chỉ số trong chương trình tra mã sách của thư viện

Lớp 11Lập trìnhpythonGiải quyết vấn đề với máy tínhVận dụng cao

Thang điểm 10 · 5 test case chấm tự động · 3 tiêu chí chấm

Bạn Lan viết chương trình LinearSearch để tra mã sách trong danh sách của thư viện và đồng thời đếm số phép so sánh (biến count) đã thực hiện, nhằm đối chiếu với công thức T(n) = n + 1 đã học ở Bài 24. Tuy nhiên chương trình của Lan có lỗi lệch chỉ số (off-by-one) nên trong một số trường hợp trả về kết quả sai. Đoạn code gốc (có lỗi) như sau:

  • def LinearSearch(A, K):
  •     count = 0
  •     for i in range(1, len(A)):
  •         count += 1
  •         if A[i] == K:
  •             return i, count
  •     return -1, count

Em hãy tìm ra lỗi (gợi ý: chương trình đã bỏ sót việc kiểm tra phần tử đầu tiên của danh sách), sửa lại cho đúng, rồi viết chương trình hoàn chỉnh đọc dữ liệu từ bàn phím và in kết quả.

Định dạng vào: Dòng 1 là số nguyên n (số lượng mã sách); dòng 2 gồm n số nguyên là các mã sách, cách nhau bởi khoảng trắng; dòng 3 là số nguyên K (mã sách cần tìm).

Định dạng ra: In ra một dòng gồm hai số nguyên cách nhau bởi khoảng trắng: chỉ số tìm được (hoặc -1 nếu không tìm thấy) và số phép so sánh count đã thực hiện.

InputOutputGiải thích
5
10 20 30 40 50
10
0 1Mã sách 10 ở vị trí 0 (đầu danh sách), chỉ cần 1 phép so sánh
5
10 20 30 40 50
99
-1 5Không tìm thấy, phải so sánh hết 5 phần tử
6
3 5 7 9 11 13
9
3 4Mã sách 9 ở vị trí 3, cần 4 phép so sánh
#tìm kiếm tuần tự#off-by-one#độ phức tạp thời gian#gỡ lỗi#category:tu_duy_phan_bien#difficulty:analyzing

Giáo viên giao bài này cho lớp, học sinh nộp bài trực tuyến và được chấm tự động.

Giáo viên đăng nhập để giao bài