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

Gỡ lỗi: Tra cứu vị trí mực nước sông tại trạm quan trắc

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

Trạm quan trắc thủy văn đo mực nước sông (đơn vị: cm) mỗi ngày trong tháng, lưu thành một danh sách đã sắp xếp tăng dần. Một bạn học sinh viết chương trình dùng thuật toán tìm kiếm nhị phân để kiểm tra một mực nước có xuất hiện trong danh sách không, nếu có thì in ra vị trí (đánh số bắt đầu từ 1), nếu không thì in Khong tim thay. Tuy nhiên khi chạy thử, có trường hợp vị trí in ra bị sai lệch.

Đoạn code của bạn ấy như sau:

def BinarySearch(A, K):
  left = 0
  right = len(A) - 1
  while left <= right:
    mid = (left + right) // 2
    if A[mid] == K:
      return mid
    elif A[mid] < K:
      left = mid + 1
    else:
      right = mid - 1
  return -1

Phần chương trình chính đọc n số thực (mực nước, đã tăng dần), rồi đọc q giá trị cần kiểm tra, gọi hàm trên và in trực tiếp giá trị trả về của hàm làm vị trí (không cộng thêm gì cả) khi tìm thấy.

Yêu cầu: Viết lại chương trình hoàn chỉnh, sửa đúng lỗi để vị trí in ra được đánh số bắt đầu từ 1 (ví dụ phần tử đầu tiên trong danh sách phải được coi là vị trí 1, không phải 0).

Định dạng vào: Dòng 1 là số nguyên n; n dòng tiếp theo mỗi dòng một số thực mực nước (đã tăng dần); dòng tiếp theo là số nguyên q; q dòng tiếp theo mỗi dòng một số thực cần kiểm tra.

Định dạng ra: Với mỗi giá trị cần kiểm tra, in một dòng: nếu tìm thấy in Vi tri X (X là vị trí tính từ 1), nếu không in Khong tim thay.

InputOutput
5
10.5
12.0
15.5
18.0
20.5
3
15.5
10.5
13.0
Vi tri 3
Vi tri 1
Khong tim thay
3
5.0
6.0
7.0
2
7.0
5.0
Vi tri 3
Vi tri 1
#tìm kiếm nhị phân#gỡ lỗi#off-by-one#đọc dữ liệu#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