本文共 697 字,大约阅读时间需要 2 分钟。
二分的关键是边界问题,整数的边界为什么要加一减一就是因为l+r>>1的过程中,有可能取到 l 或 r 让 l = mid或 r=mid进入死循环,所以在边界处理时要加一减一.而浮点数就不用考虑这个问题直接/2就可以了
分三部分 判断函数,二分函数,主函数;
定义数据位置。。。。。。判定函数bool judge(int mid){ int a//定义初值 if(满足题意) return true; else return false;}二分函数int solve1()//向大的方向查找{ int l,r,mid;//根据题目定初值 while(l
double solve1()//向大的方向查找{ double l,r,mid;//根据题目定初值 while(r-l>eps)//看题目要求保留几位小数,比如保留6位小数,eps就是1e-8,四位小数就是1e-6; { mid=(l+r)/2; if(judge(mid)) l=mid; else r=mid; } printf("%.6lf\n",r);}double solve2()//向小的方向查找{ double l,r,mid;//根据题目定初值 while(r-l>eps)//看题目要求保留几位小数,比如保留6位小数,eps就是1e-8,四位小数就是1e-6; { mid=(l+r)/2; if(judge(mid)) r=mid; else l=mid; } printf("%.6lf\n",r);}
转载地址:http://rtagz.baihongyu.com/