#mengxiongP4. 二分查找-阅读程序(二)
二分查找-阅读程序(二)
二分查找 - 阅读程序(二)
题目描述
阅读以下程序,回答判断题(第 1-4 题,每题 10 分)和选择题(第 5-6 题,第 5 题 30 分,第 6 题 30 分)。
已知 k ≤ n × m,保证 n、m 同阶。
#include<bits/stdc++.h>
using namespace std;
int n, m, k, l, r, mid;
int check(int g) {
int st = 1, ed = m, cnt = 0;
while(st <= n && ed >= 1) {
if(st * ed > g)
ed--;
else {
cnt += ed;
st++;
}
}
return cnt >= k;
}
int main() {
scanf("%d%d%d", &n, &m, &k);
l = 1, r = n * m;
while(l < r) {
mid = (l + r) / 2;
if(check(mid)) r = mid;
else l = mid + 1;
}
cout << l << endl;
return 0;
}
判断题
第 1 题 每次运行 check 时,第 7 行必定运行 n 次。{{ select(1) }}
- 正确
- 错误
第 2 题 如果保证 m = 1,则输出一定为 k。{{ select(2) }}
- 正确
- 错误
第 3 题 若将第 21 行中的 r = mid 改成 r = mid - 1,程序输出一定不变。{{ select(3) }}
- 正确
- 错误
第 4 题 第 24 行可以改成 cout << r << endl;。{{ select(4) }}
- 正确
- 错误
选择题
第 5 题 该程序的时间复杂度为( ){{ select(5) }}
- A. O(n)
- B. O(n log n)
- C. O(n²)
- D. O(nk)
第 6 题 若输入为 2 3 4,则输出为( ){{ select(6) }}
- A. 1
- B. 2
- C. 3
- D. 6