将题目中的二分写法做一个小小的改变即可,注意:一定要将左边移动,不然会损失一些次数。
#include <bits/stdc++.h> using namespace std; int f(int l, int r, int cnt) { int n = 0, mid; while (l<=r) { n++; mid = ((long long)l+r)/2; if (n==cnt) break; else l = mid+1; } if (cnt>n) { return -1; } return mid; } int main() { int T; cin>>T; while (T--) { int l, r, cnt; cin>>l>>r>>cnt; cout<<f(l, r, cnt)<<endl; } return 0; }