分治例题

Description
任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+20
同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7=22+2+20(21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=210+28+25+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
Input一个正整数n(n≤20000)。Output一行,符合约定的n的0,2表示(在表示中不能有空格)。Sample Input137

Sample Output
2(2(2)+2+2(0))+2(2+2(0))+2(0)
递归求解问题
分解表达式可得 最小组成单位 ‘2’,’+’,”2(“,”2(0)”,’)’;
判断终止条件, 当n == 2 或者n == 1;
技巧, 求小于n的2的次方的最大值

#include<iostream>
using namespace std;

void binary_(int n)
{
    if(n == 1)
      cout<<"2(0)";//如果n= 1,则直接输出2(0)
    else if(n == 2)
          cout<<"2";//如果n = 2,则直接输出2
    else
    {
        int j = 1, i = 0;
       do//调用循环求得不大于n的2的整数次方的最大值j
       {
         j*=2;
         if(j>n)
         {
            j/=2;
            if(j == 2)
                cout<<"2";
            else
            {
                cout<<"2(";
                binary_(i);
                cout<<")";
            }
            if(n - j != 0)
            {
                cout<<'+';
                binary_(n-j);
            }
            return ;
         }
         i++;
         }
         while(1);
    }
}
int main(void)
{
    int n;
    cin>>n;
    binary_(n);
    return 0;
}
全部评论

相关推荐

AI牛可乐:哇,听起来你遇到了什么挑战呢!🐮牛可乐在这里,虽然小,但是勇敢又聪明,想听听你的具体情况哦!如果你愿意的话,可以点击我的头像给我私信,我们可以一起想办法应对挑战,好不好呀?🌟🎉
点赞 评论 收藏
分享
暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务