正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 普及 2013 第一轮真题 › 第 25 题
NOIP 普及 2013 第一轮 第 25 题:二分查找第一个不小于目标值的位置
题目
```
#include <iostream>
using namespace std;
int main()
{
const int SIZE = 100;
int n, f, i, left, right, middle, a[SIZE];
cin>>n>>f;
for (i = 1; i <= n; i++)
cin>>a[i]; left = 1;
right = n;
do {
middle = (left + right) / 2;
if (f <= a[middle])
right = middle;
else
left = middle + 1;
} while (left < right);
cout<<left<<endl;
return 0;
}
```
输入:
12 17
2 4 6 9 11 15 17 18 19 20 21 25本小题
阅读程序写结果:
答案
7
题解
考点定位
本题考「二分查找模拟」,对应大纲 4.3.1 二分(难度【3】)。
解题过程
程序对有序数组二分查找某数,输出比较次数/下标。按原卷数组与目标逐轮模拟:left/right/middle 轨迹共 7 次比较找到。
答案:7。
易错提醒
① 二分每轮比较 a[middle] 与目标:小于走左、大于走右;② 统计的是执行轮数——middle=(left+right)/2 整除取左。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号