Skip to main content

Practice · 1 of 5

Debug: Tìm kiếm nhị phân — off-by-one

CHALLENGE
Difficulty: intermediate+25 XP

**Bài toán (đã đúng):** Mảng tăng ngặt n phần tử. Trả về chỉ số (0-based) của x nếu có, ngược lại trả về −1. **Chương trình dưới đây SAI.** Tìm lỗi và sửa: với n = 1 nó in −1 dù phần tử duy nhất có khớp x. **Code lỗi:** ``cpp void solve(std::istream& in, std::ostream& out) { int n; in >> n; vector<long long> a(n); for (auto& x : a) in >> x; long long x; in >> x; int lo = 0, hi = n - 1, ans = -1; while (lo < hi) { // BUG: phải là lo <= hi int mid = lo + (hi - lo) / 2; if (a[mid] == x) { ans = mid; break; } else if (a[mid] < x) lo = mid + 1; else hi = mid - 1; } out << ans; } ` **Yêu cầu:** nộp bản ĐÃ SỬA (đổi điều kiện vòng lặp, giữ nguyên logic còn lại) và pass mọi test. **Input:** dòng 1: n; dòng 2: mảng tăng; dòng 3: giá trị cần tìm. **Ví dụ:** 1 / 4 / 4 -> 0` (bản lỗi in −1: vòng không chạy khi lo == hi).

Back to lesson: Practice: Debugging Problem Set