酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

利用二分查找找出水流最大速度的程序实现

为了实现找出水流最大速度的程序,可利用二分查找的方法。因水流速度先上升后下降,其速度序列呈单峰特性,适合用二分查找。 以下是完整的代码实现: ```cpp #include <iostream> using namespace std; // 定义数组 a 用于存储速度数据,n 为记录的速度次数,l 和 r 分别为二分查找的左右边界,mid 为中间位置 int a[100005], n, l, r, mid; int main() { // 读取速度记录的次数 cin >> n; // 循环读取每次的水流速度,并存储到数组 a 中 for (int i = 1; i <= n; i++) { cin >> a[i]; } // 初始化左边界为 1,右边界为 n l = 1, r = n; while (l <= r) { // 计算中间位置 mid = (l + r) / 2; // 如果中间位置的速度小于其右侧位置的速度,说明最大值在 mid 的右侧,更新左边界 if (a[mid] < a[mid + 1]) { l = mid + 1; } // 如果中间位置的速度小于其左侧位置的速度,说明最大值在 mid 的左侧,更新右边界 else if (a[mid] < a[mid - 1]) { r = mid - 1; } // 否则,mid 位置的速度就是最大值 else { cout << a[mid] << endl; break; } } return 0; } ``` ### 代码解释 1. **输入处理**:第一行读取整数 `n`,此为速度记录的次数;第二行借助循环读取 `n` 个整数,将每次的水流速度存于数组 `a` 里。 2. **二分查找**: - 初始化左边界 `l` 为 1,右边界 `r` 为 `n`。 - 计算中间位置 `mid`。 - 若 `a[mid] < a[mid + 1]`,表示最大值处于 `mid` 的右侧,更新 `l = mid + 1`。 - 若 `a[mid] < a[mid - 1]`,表示最大值处于 `mid` 的左侧,更新 `r = mid - 1`。 - 否则,`mid` 位置的速度即为最大值,输出该值并终止循环。 ######[AI问答 | 619点数解答 | 2026-08-09 21:40:03]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]