二分法
描述:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。
简单介绍:在有序的有N个元素的数组中查找用户输进去的数据x。
算法如下:
确定查找范围front=0,end=N-1,计算中项mid(front+end)/2。若a[mid]=x或front>=end,则结束查找;否则,向下继续。若a[mid]<x,说明待查找的元素值只可能在比中项元素大的范围内,则把mid+1的值赋给front,并重新计算中项mid,继续执行步骤2;若a[mid]>x,说明待查找的元素值只可能在比中项元素小的范围内,则把mid-1的值赋给end,并重新计算mid,继续执行步骤2。
以求解2的平方根的程序为基础,编程实现:输入一个浮点数,计算其平方根。要求如下:
不准使用如sqrt()的库函数代码必须上传并确保自己测试通过输入一个浮点数输出该浮点数的平方根
提示:
测试输出与标准测试结果不符的一种可能原因是计算精度不够,简单的解决方法是将循环计算的次数提高,如将20次提高到30次。
一定要考虑到根大于0的情况,而不是求根号2那样利用1.0这个下限。
测试说明测试输入:2
预期输出:1.41421
#include <iostream>
using namespace std;
int main()
{
float m;
cin>>m;
float low=0,high=m,val;
for(int i=0;i<30;i++)
{
val=(low+high)/2;
if(val*val<m)
low=val;
else
high=val;
}
cout<<val;
return 0;
}
来源:CSDN
作者:丹青客
链接:https://blog.csdn.net/huangziguang/article/details/104812936