当前位置: 首页 > news >正文

C++二分查找(练习题)

找左端点【STL二分查找函数法】

【描述】请在一个有序不递减的数组中(数组中有相等的值),采用二分查找,找到值 x 第 1 次出现的位置,如果不存在x 请输出-1。
【输入描述】
第一行,一个整数n,代表数组元素个数(n <= 106)
第二行,n个数,代表数组的n个递增元素
第三行,一个整数x,代表要查找的数
【输出描述】
x在数组中的位置,位置从1开始编号;没找到,输出-1。
【输入用例】
9
3 3 3 4 9 11 13 15 17
3
【输出用例】
1

#include<iostream>#include<algorithm>usingnamespacestd;inta[110];intn,x;intmain(){cin>>n;for(inti=1;i<=n;i++){cin>>a[i];}cin>>x;// 先找第一个>=x的值的位置idintid=lower_bound(a+1,a+n+1,x)-a;if(id>n||a[id]!=x)// 没找到,或者只找到>x的值cout<<-1;elsecout<<id;return0;}/* 【输入用例2】 10 1 3 5 7 9 11 13 15 17 19 20 【输出用例2】 -1 【输入用例3】 10 1 3 5 7 9 11 13 15 17 19 -2 【输出用例3】 -1 【输入用例4】 10 1 3 3 3 9 11 13 15 17 19 3 【输出用例4】 2 【输入用例5】 10 1 9 11 13 15 17 19 20 20 20 20 【输出用例5】 8 【输入用例6】 10 12 6 9 23 35 69 75 15 45 33 69 【输出用例6】 6 */

查找元素

【描述】使用STL的lower_bound函数查找数组中第一个大于等于目标值的元素位置
【输入描述】
输入为三行,第一行为数组元素,数组元素不超过100个;第二行输入需要查找的值,第三行为数组元素
【输出描述】
输出查找的结果
【输入用例1】
10
35
10 20 30 40 50 60 70 80 90 100
【输出用例1】
第一个大于等于 35 的元素在索引 3 处,值为 40
【输入用例2】
10
110
10 20 30 40 50 60 70 80 90 100
【输出用例2】
没有找到大于等于 110 的元素

#include<iostream>#include<algorithm>usingnamespacestd;voidstlLowerBound(){intarr[100];//数据数组intn;inttarget;cin>>n;cin>>target;//输入查找值for(inti=0;i<n;i++){cin>>arr[i];//输入元素}int*pos=lower_bound(arr,arr+n,target);if(pos!=arr+10)cout<<"第一个大于等于 "<<target<<" 的元素在索引 "<<(pos-arr)<<" 处,值为 "<<*pos<<endl;elsecout<<"没有找到大于等于 "<<target<<" 的元素"<<endl;}intmain(){stlLowerBound();return0;}/* 【输入用例2】 5 3 1 2 3 4 5 【输出用例2】 第一个大于等于 3 的元素在索引 2 处,值为 3 【输入用例3】 6 2 2 2 3 3 4 4 【输出用例3】 第一个大于等于 2 的元素在索引 0 处,值为 2 【输入用例4】 3 0 5 6 7 【输出用例4】 第一个大于等于 0 的元素在索引 0 处,值为 5 【输入用例5】 5 3 3 1 4 2 5 【输出用例5】 第一个大于等于 3 的元素在索引 2 处,值为 4 【输入用例6】 10 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 【输出用例6】 没有找到大于等于 16 的元素 */

统计次数

【描述】在有序数组中统计某个元素的出现次数
【输入描述】
输入为三行,第一行为数组元素,数组元素不超过100个;第二行输入需要查找的值,第三行为数组元素
【输出描述】
输出该数字出现的次数
【输入用例】
10
110
10 20 30 40 50 60 70 80 90 100
【输出用例】
元素 110 出现了 0 次

#include<iostream>#include<algorithm>usingnamespacestd;voidcountOccurrences(){intarr[100];//数据数组intn;inttarget;cin>>n;cin>>target;//输入查找值for(inti=0;i<=n;i++){cin>>arr[i];//输入元素}// 使用STL函数intfirst=lower_bound(arr,arr+n,target)-arr;intlast=upper_bound(arr,arr+n,target)-arr;intcount=last-first;cout<<"元素 "<<target<<" 出现了 "<<count<<" 次";}intmain(){countOccurrences();return0;}/* 【输入用例2】 5 2 1 2 2 3 4 【输出用例2】 元素 2 出现了 2 次 【输入用例3】 4 5 1 3 5 7 【输出用例3】 元素 5 出现了 1 次 【输入用例4】 4 5 2 4 6 8 【输出用例4】 元素 5 出现了 0 次 【输入用例5】 3 4 1 2 3 【输出用例5】 元素 4 出现了 0 次 【输入用例6】 4 5 5 5 5 5 【输出用例6】 元素 5 出现了 4 次 */

寻找峰值

【描述】输入一个数组,找出该数组的局部(左半部分或右半部分)最大值,数组的元素为在10个以内。
【输入描述】
输入为一行,是需要的被查找的数组元素
【输出描述】
输出该数组峰值数的索引值与本身值
【输入用例】
6
1 2 4 5 3 1
【输出用例】
峰值在索引 3,值为 5

#include<iostream>#include<algorithm>// 用于max_elementusingnamespacestd;voidfindGlobalMax(){intarr[100],n;cin>>n;for(inti=0;i<n;i++){cin>>arr[i];}// 用algorithm找全局最大值,通过索引访问intmaxIndex=max_element(arr,arr+n)-arr;// 直接计算索引cout<<"峰值在索引 "<<maxIndex<<",值为 "<<arr[maxIndex]<<endl;}intmain(){findGlobalMax();return0;}/* 【输入用例2】 5 1 3 2 4 5 【输出用例2】 峰值在索引 4,值为 5 【输入用例3】 3 5 4 3 【输出用例3】 峰值在索引 0,值为 5 【输入用例4】 4 1 2 3 4 【输出用例4】 峰值在索引 3,值为 4 【输入用例5】 5 5 4 3 2 1 【输出用例5】 峰值在索引 0,值为 5 【输入用例6】 5 1 5 2 6 3 【输出用例6】 峰值在索引 3,值为 6 */

寻找旋转排序数组中的目标值

【描述】输入一个旋转排序数组,找出需要寻找的目标元素,输出该元素的相关信息
【输入描述】
输入为三行,第一行是数字元素个数(不超过100),第二行为需要寻找的目标值,第三行为该数组元素。
【输出描述】
输出目标值信息
【输入用例1】
10
2
5 4 5 6 7 0 1 2 1
【输出用例1】
找到目标值 2 在索引 7
【输入用例2】
10
0
5 4 5 6 7 1 1 2 1
【输出用例2】
未找到目标值 0

#include<iostream>#include<algorithm>usingnamespacestd;voidsearchArray(){intarr[100];//数据数组intn;inttarget;cin>>n;cin>>target;for(inti=0;i<=n;i++){cin>>arr[i];//输入元素}intleft=0,right=8;while(left<=right){intmid=left+(right-left)/2;if(arr[mid]==target){cout<<"找到目标值 "<<target<<" 在索引 "<<mid;return;}// 判断哪一部分是有序的if(arr[left]<=arr[mid]){// 左半部分有序if(arr[left]<=target&&target<arr[mid]){// 目标值在左半部分right=mid-1;}else{// 目标值在右半部分left=mid+1;}}else{// 右半部分有序if(arr[mid]<target&&target<=arr[right]){// 目标值在右半部分left=mid+1;}else{// 目标值在左半部分right=mid-1;}}}cout<<"未找到目标值 "<<target<<endl;}intmain(){searchArray();return0;}/* 【输入用例1】 10 2 5 4 5 6 7 0 1 2 1 【输出用例1】 找到目标值 2 在索引 7 【输入用例2】 10 0 5 4 5 6 7 1 1 2 1 【输出用例2】 未找到目标值 0 【输入用例3】 7 3 1 2 3 4 5 6 7 【输出用例3】 找到目标值 3 在索引 2 【输入用例4】 7 8 4 5 6 7 0 1 2 【输出用例4】 未找到目标值 8 【输入用例5】 1 5 5 【输出用例5】 找到目标值 5 在索引 0 */

寻找多个数值

【描述】输入一个数组,再输入一些数值,判断这些数是否存在在该数组中
【输入描述】
输入为四行,第一行为被寻找数组元素个数,第二行为被寻找数组元素;第三行为寻找数组的元素个数,第四行为寻找数组元素。
【输出描述】
输出目标值被找到情况
【输入用例】
10
1 2 3 4 5 6 7 8 9 10
4
3 6 9 12
【输出用例】
目标值 3 在数组中找到
目标值 6 在数组中找到
目标值 9 在数组中找到
目标值 12 未找到

#include<iostream>#include<algorithm>usingnamespacestd;voidsearchMultipleTargets(){intarr[100];//数据数组intn,m;inttargets[100];cin>>n;for(inti=0;i<n;i++){cin>>arr[i];//输入元素}cin>>m;for(inti=0;i<m;i++){cin>>targets[i];//输入元素}for(inti=0;i<m;i++){inttarget=targets[i];intleft=0,right=n-1;boolfound=false;while(left<=right){intmid=left+(right-left)/2;if(arr[mid]==target){found=true;break;}elseif(arr[mid]<target){left=mid+1;}else{right=mid-1;}}if(found)cout<<"目标值 "<<target<<" 在数组中找到"<<endl;elsecout<<"目标值 "<<target<<" 未找到"<<endl;}}intmain(){searchMultipleTargets();return0;}/* 【输入用例2】 5 1 3 5 7 9 2 5 4 【输出用例2】 目标值 5 在数组中找到 目标值 4 未找到 【输入用例3】 3 2 4 6 1 2 【输出用例3】 目标值 2 在数组中找到 【输入用例4】 4 10 20 30 40 1 40 【输出用例4】 目标值 40 在数组中找到 【输入用例5】 5 5 10 15 20 25 1 18 【输出用例5】 目标值 18 未找到 【输入用例6】 6 2 4 6 8 10 12 3 6 9 12 【输出用例6】 目标值 6 在数组中找到 目标值 9 未找到 目标值 12 在数组中找到 */
http://www.jsqmd.com/news/990640/

相关文章:

  • GetQzonehistory:三步实现QQ空间历史数据完整备份的实用工具
  • 免费运行大模型!让你的AI在本地部署
  • 从ResNet到ConvNeXt:我是如何用PyTorch一步步复现这个‘现代版CNN’的(附完整代码)
  • 企业级微信集成架构解析:高性能Java SDK技术选型指南
  • 2026 安徽蚌埠彩钢瓦修缮 TOP4 权威推荐(全区域服务・避坑指南) - 本地便民网
  • 深耕宜春黄金回收行业!2026年6月优质回收商家盘点与完整交易指南 - 润富黄金回收
  • 2026年蔡司X射线显微镜Xradia厂家选型实操技术分享:蔡司SEM扫描电镜、蔡司三坐标MICURA系列、蔡司三坐标PRISMO系列选择指南 - 优质品牌商家
  • 游戏开发者必看:5分钟掌握gdx-texture-packer-gui纹理打包神器
  • 量子信息论中的冯·诺依曼熵与最大熵原理
  • 推荐靠谱的酒店专用商用不锈钢厨具 - myqiye
  • 测评揭密:2026最适合“转行跨考”的简历工具排行榜及落地实操
  • 聊城旧金怎么卖不吃亏 2026金价与回收避坑干货 - 余生黄金回收
  • 小目标检测轻量方案:MobileNet+VGG16双主干SSD实现,含训练/推理/测速全流程代码与实操指南
  • 2026年不锈钢厨具定制上门服务品牌推荐哪家 - myqiye
  • 2026 浙江舟山彩钢瓦修缮 TOP4 权威推荐(全区域服务 + 避坑指南) - 本地便民网
  • 在职考研资料网盘|教材|电子版|资料已整理
  • 锦州黄金回收全攻略 2026年6月实时金价 避坑指南 - 余生黄金回收
  • BMS开发避坑指南:为什么你的卡尔曼滤波SOC估算总是不准?
  • 六盘水黄金回收行情报价 本地变现避坑完整干货指南 - 余生黄金回收
  • 用Arduino和逻辑分析仪玩转Futaba SBUS2遥测:从数据采集到遥控器回显全流程
  • 本地生活笔记内容的样本分析SOP
  • 宜春闲置黄金如何安心变现?2026年6月黄金回收门店实测与避坑技巧 - 润富黄金回收
  • 2026成都小程序定制技术分享:四川软件开发、成都APP开发、成都CRM开发、成都GEO优化、成都UI设计、成都小程序开发选择指南 - 优质品牌商家
  • 东方金厨价格贵不贵 - myqiye
  • 2026赣州黄金回收全攻略 多家靠谱门店详解与避坑指南 - 润富黄金回收
  • 萍乡闲置黄金变现实用指南2026年6月版 - 润富黄金回收
  • DIY智能小车核心:STM32 HAL库驱动电机与编码器测速全攻略(含PCB与源码)
  • STM32F103 MP3播放器完整Keil工程:含解码驱动、图形显示与可烧录固件
  • 社区养老服务系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 抖音风H5商城全套源码(2025稳定版,PHP+uni-app双端适配)