给定整数n,求离根号n最近的整数。

如题,如何使用二分查找实现#笔试题目#
全部评论
def func(n):     p = 0.618     i = 0     j = n     while i<=j:         mid = int(p*i + (1-p)*j)         if abs(mid*mid-n)<=abs((mid-1)*(mid-1)-n) and abs(mid*mid-n)<=abs((mid+1)*(mid+1)-n):             return mid         elif abs((mid-1)*(mid-1)-n)<=abs(mid*mid-n) and abs(mid*mid-n)<=abs((mid+1)*(mid+1)-n):             j = mid - 1         else:             i = mid + 1
点赞 回复 分享
发布于 2019-08-13 10:58
  private static int core(int n){     int small=0,big=n/2+1,mid=0;     while(small<big){         mid = small+(big-small)/2;         if(mid*mid>n)  big = mid-1;         else if(mid*mid<n)  small=mid+1;         else   return mid;     }     int s=0,e=0;     if(mid*mid>n){         s = mid-1;e = mid;     }else{         s = mid;e = mid+1;     }     double m = (s+e)/2.0;     if(m*m<n) return e;     else return s; }
点赞 回复 分享
发布于 2019-08-23 09:13
import numpy as np def bin_search_sqrt(num): left, right = 0, num while right - left > 1: mid = (left + right) // 2 if mid ** 2 > num: right = mid else: left = mid return right if right**2 - num < num - left**2 else left for i in range(15, 37): print(i,bin_search_sqrt(i),np.sqrt(i))输出: 16 4 4.0 17 4 4.12310562562 18 4 4.24264068712 19 4 4.35889894354 20 4 4.472135955 21 5 4.58257569496 22 5 4.69041575982 23 5 4.79583152331 24 5 4.89897948557 25 5 5.0 26 5 5.09901951359 27 5 5.19615242271 28 5 5.29150262213 29 5 5.38516480713 30 5 5.47722557505 31 6 5.56776436283 32 6 5.65685424949 33 6 5.74456264654 34 6 5.83095189485 35 6 5.9160797831 36 6 6.0看上去好像是可以的?
点赞 回复 分享
发布于 2019-08-13 12:49
def find_nearest_n(number):     left = 0     right = number     while right-left >= 0.01:         if ((left+right)/2)**2 == number:             return (left+right)/2         elif ((left+right)/2)**2 > number:             right = (left+right)/2         else:             left = (left+right)/2     if int(right) > int(left):         return int(right)     elif left - int(left) < 0.5:         return int(left)     else:         return int(left)+1 阈值可以再调大一点 应该有还有更好的方法
点赞 回复 分享
发布于 2019-08-13 11:45
牛顿割线法
点赞 回复 分享
发布于 2019-08-13 10:55
Sqrt(n)四舍五入不行吗?
点赞 回复 分享
发布于 2019-08-13 10:49
一次找小于sqrt(n)中最大的,一次找大于之中最小的,再比较这样?
点赞 回复 分享
发布于 2019-08-13 10:19

相关推荐

首先讲三个故事,关于牛客的事件一:2024年,牛客上有一对高学历情侣,求职方向与我当时一致,都是嵌入式方向。他们恰好是我的朋友,专业能力和学历背景都很扎实,也因此拿到了不少优质offer。和很多求职者一样,他们把offer情况整理后发在平台上,本意是记录与交流,但很快引发了争议。有声音指责他们“集邮”“不释放名额”,认为这种展示本身就是一种炫耀。最终讨论失控,当事人删除内容,事件也很快被遗忘。事件二:小红书评论区,一条评价获得了不少共鸣:“感觉牛客就是当年那群做题区毕业了开始找工作还收不住那股味,颇有一种从年级第一掉到年纪第二后抱怨考不上大学的味道”,这条评论被水印里这个同学转发到牛客后,评论...
小型域名服务器:当看到别人比自己强的时候,即便这是对方应得的,很多人会也下意识的歪曲解构对方的意图,来消解自己在这本就不存在的比较中输掉的自信,从而平白制造出很多无谓的争论。比如你会在空余时间来写优质好文,而我回家只会暗区突围,那么我就可以作为键盘侠在这里评论你是不是XXXXXXXX。即便我自己都知道这是假的,但只要这没那么容易证伪,那么当你开始回应的时候,脏水就已经泼出去了,后面可能会有更多的人带着情绪来给我点赞,而毫不关注你写的文章内容本身是啥了。
SAGIMA牛马咖啡
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务