腾讯9月13号数字转换机的题解,大家帮忙看看对不对。

【题目】
大意就是现在给a b A B 四个整数,每次可以对a b同时做一个+1操作或一个*2操作,问经过多少次操作之后a转化为A,同时b转为B。求操作的最小次数,如果不能转换就输出-1。
【思路】
其实首先可以进行一个公式转换。
假设总共进行了n次*2操作, m次+1操作,第i次+1操作后面进行了ki次*2操作。那么:
A = a*2n + 2k1 + … + 2km
B = b*2n + 2k1 + … + 2km, 其中,n >= k1 >= k2 >= … >= km >= 0
例如,假设a=101,
((a+1+1)*2+1)*2+1 =((101 + 1 + 1)*2 +1)*2 + 1 = 101 * 2 * 2 + 1 * 2 * 2 + 1 * 2 *2 + 1 * 2 + 1 = a * 22+22+22+21+20
n=2, m=4, k1=2, k2=2, k3=1, k4=0
有了这个公式就好办了,只需要枚举n的值,然后判断 A - a*2n == B - b*2n ,再计算m的值即可。
#include<iostream>
#include<cmath>
#include<climits>
using namespace std;

int calculateM(int remain, int n)
{
    int m = 0;
    do
    {
        m += remain / (1 << n);
        remain = remain % (1 << n);
        n--;
    }while(n >= 0 && remain > 0);
    return m;
}
int findMin(int a, int b, int A, int B)
{
    int maxMulti = min((int)(log(((double)A)/a)/log(2.0)),(int)(log(((double)B)/b)/log(2.0)));
    int min = INT_MAX;
    for(int n = maxMulti; n >= 0; --n)
    {
        if(A - (a << n) == B - (b << n))
        {
            int m = calculateM(A - (a << n), n);
            min = m + n < min ? m + n : min;
        }
    }
    if(min == INT_MAX)
        return -1;
    return min;
}

int main()
{
    int a, b, A, B;
    cin >> a >> b >> A >> B;
    cout << findMin(a,b,A,B) << endl;
    return 0;
}



#腾讯#
全部评论
楼主大佬,成功的让我发现我笔试时候做错了。。。
点赞 回复 分享
发布于 2017-09-15 18:54

相关推荐

hanliu:1. 排版与格式问题字体与对齐问题:标题和内容的字体大小差异不够明显,无法迅速吸引目光。某些文字看起来有些拥挤(比如校园经历中的“班委成员”部分)。2. 内容逻辑性模块顺序问题:实习经历放在较靠后的位置,实际上这部分内容对应聘来说更重要,建议提前突出。细节表述不够突出:比如教育背景部分的专业课程仅仅列出名字,没有说明自己在这些课程中表现如何或者掌握了什么技能,缺乏量化描述。多余内容:例如“班委成员”和“宣传委员”这类校园经历,叙述过于普通,缺乏和岗位相关的实质性贡献。,建议简写。3. 措辞专业性表达不够精准:例如“协助班长与团支书更好地为同学服务”显得较为笼统,没有实际成果的体现。用词重复:如“学习了焊接”“学习了光检”等重复词语较多,缺乏丰富的动词来展示个人能力(如“负责”“优化”“改进”等)。技能展示不足:虽然列出了UG和CAD证书,但没有明确提到这些技能如何在实际工作中发挥作用。4. 技能匹配度技能深度不足:虽然列出了掌握的软件和技术,但没有描述技能水平(如“熟练掌握”“精通”),也没有具体案例支持这些技能。缺乏岗位导向性:比如针对机械设计与制造方向,实习经历提到了“E6尾灯项目”,但没有详细说明自己在其中的技术贡献,可能会显得经验描述泛泛而谈。5. 自我评价问题表达空泛:如“具有良好的沟通协调能力”“责任心强”之类的描述太常见,没有让人眼前一亮的特点。缺乏成果支持:自我评价中的能力没有用具体项目、经历或成就来验证,可信度较弱。 兄弟加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务