Problem A: [CSP-S1][程序阅读] 程序阅读6
Memory Limit:128 MB
Time Limit:1.000 S
Judge Style:Text Compare
Creator:
Submit:71
Solved:8
Description
int findLast(int a[], int n, int x) { int l = 0, r = n; // n为数组长度 while (l < r) { int mid = (l + r) / 2; if (a[mid] <= x) l = mid + 1; else r = mid; } return l - 1; } |
判断题(正确填√,错误填×)
1. 当数组中存在x时,函数返回x最后一次出现的下标。( )
2. 若x大于数组所有元素,函数返回n-1。( )
3. 循环不变式为`a[l-1] ≤ x < a[r]`。( )
4. 若x小于数组所有元素,函数返回-1。( )
5. 当`a[mid] == x`时,仍需继续向右半部分查找。( )
选择题
6. 数组`[1,2,2,3,4]`查找x=2时,返回值是:
A. 1 B. 2 C. 3 D. -1
7. 若将`a[mid] <= x`改为`a[mid] < x`,函数将返回:
A. 最后一个≥x的元素下标
B. 最后一个>x的元素下标
C. 第一个≥x的元素下标
D. 第一个>x的元素下标
8. 当`n=0`时,函数返回值是:
A. -1 B. 0 C. 1 D. 未定义
9. 循环结束时,`l`和`r`的关系是:
A. l = r B. l = r - 1 C. l = r + 1 D. l > r
10. 若数组降序排列,需如何修改代码?
A. 交换`l=mid+1`和`r=mid`的条件
B. 将`a[mid]<=x`改为`a[mid]>=x`
C. 无需修改
D. 无法实现