13829. 珅泽教育CSP-J第一轮模拟考第十八套 第 34 题
珅泽教育CSP-J第一轮模拟考第十八套 第 34 题
程序阅读(3):等差数列与二分查找
阅读程序,回答第 29—35 题。设 n 为正整数,计算过程中不发生整数溢出。
int solve(int x, int a, int d, int n)
{
if (d < 0) {
return solve(x, a + d * (n - 1), -d, n);
}
int begin = 0;
int end = n;
while (begin < end) {
int mid = begin + (end - begin) / 2;
if (a + d * mid < x) {
begin = mid + 1;
} else {
end = mid;
}
}
if (end == 0) {
return a - x;
} else if (end == n) {
return x - (a + d * (n - 1));
} else {
int upper = a + d * end;
int lower = upper - d;
return std::min(x - lower, upper - x);
}
}
当 end == n 时,说明( )。
{{ select(1) }}
- 比首项还小
- 比末项还大
- 恰好等于某一项
- 位于数列中某两项之间