c++ - 为什么这个 C++ 程序没有显示任何输出?
问题描述
我正在尝试为二进制搜索编写代码,但它没有显示任何输出。请告诉我我的错误。
#include <iostream>
using namespace std;
int main(){
int a[]= {1, 3, 5 , 7, 32};
int n;
cin>>n;
int last=(sizeof(a)/sizeof(a[0]))-1;
int first=0;
while(first<=last){
int mid=(last-1)/2;
if(a[mid]==n){
cout<<"No. Found"<< endl;
}
if(n>a[mid])
{
first=mid+1;
}
else
{
last=mid-1;
}
}
cout<<"Not Found"<<endl;
return 0;
}
解决方案
你计算的方式mid
不对,应该是这样的:
int mid = (first + last) / 2;
最好的方法是避免溢出(first + last
可以溢出):
int mid = first + (last - first) / 2;
或使用>>
运算符:
int mid = (first + last) >> 1;
推荐阅读
- python - 试图通过 python requests new york Times 获取填字游戏排行榜时间
- python - 部分字符串被选为 ip 地址
- javascript - 如何在 Vanilla js 中制作 .env 文件并在其中隐藏令牌
- python - 用 Nan 替换 NONE - 但它会重新出现在代码的后续输出中
- swagger - Swagger/OpenAPI:在查询参数中定义数组的有效方法是什么?
- javascript - 如何减少过度冗余的for循环
- django - 'method' 对象不可下标错误发生
- javascript - 赛普拉斯似乎无法在 iframe 中找到任何元素
- reactjs - 反应不合逻辑的行为:使用过滤器功能时从状态中删除所有项目
- javascript - 使用套接字 io 流式传输数据