腾讯笔试编程题第三道

腾讯笔试编程题第三道题 a,b两个数同时加1或者同时乘以2,求最小等于A,B的次数,用的递归方法,用了三个判断分别是1):  if  (a+1)*2==A、(b+1)*2==B。2)else if    a*2<=A、B*2<=B。3) else    递归函数名(a/2+1   b/2+1)、方法是递归,试了几个简单的用例还可以如果复杂的话不知道行不行,有和我一样做法的么
全部评论
逆向奇偶分析,偶数除2,奇数减1。
点赞
送花
回复 分享
发布于 2017-09-13 17:21
我这是第一道555
点赞
送花
回复 分享
发布于 2017-09-13 17:17
国泰君安
校招火热招聘中
官网直投
看大家都在吐槽腾讯的编程环境我就放心了,那也叫智能提示?
点赞
送花
回复 分享
发布于 2017-09-13 17:14
我也用的递归方法
点赞
送花
回复 分享
发布于 2017-09-13 17:18
听大神说的BFS
点赞
送花
回复 分享
发布于 2017-09-13 17:19
先判断判断两组数的大小吧,A<a这种是不行的,要求a必须变成A吗,如果是的话ab得大小关系一定和AB的大小关系一样,如果不是的话得先判断大小关系,小的变小的,大的变大的
点赞
送花
回复 分享
发布于 2017-09-13 17:20
乘2操作,和加1操作最后,就是a 乘以 2^ n + f(2)的多项式 例子: ((a + 1) * 2 + 1) * 2 = > a.2 ^ 2 + 2^2 + 2... A - B = a*2 ^n - b*2^n => n = log2( (A - B) / (a -b)),球的乘2的个数 然后再贪心求1的个数
点赞
送花
回复 分享
发布于 2017-09-13 17:26
我的思路是将 a A转化成二进制然后再进行比较 例子一: 100: 1100100 202: 11001010   // 2位不同即需要2次 (1+1 =2) 406: 110010110 // 3位不同即需要3次 (1+2 =3) 因为1100100<1100101,所以直接比较, 例子二: 7 18 18:111 20:10010 因为111>100,所以比较111 和 1001的差,记录数,然后再比较不同的位数。 所以 2 +1,需要三步 即先比较 a和A a.length长度的二进制
点赞
送花
回复 分享
发布于 2017-09-13 17:43
反过来就行了吧
点赞
送花
回复 分享
发布于 2017-09-13 17:46

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务