acwing 3483

Posted wdxt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了acwing 3483相关的知识,希望对你有一定的参考价值。

acwing 3483.2的幂次方

每个正数都可以用指数形式表示。

例如,137=27+23+20。

让我们用 a(b) 来表示 ab。

那么 137 可以表示为 2(7)+2(3)+2(0)。

因为 7=22+2+20,3=2+20,所以 137 最终可以表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。

给定一个正数 n,请你将 n 表示为只包含 0 和 2 的指数形式。

输入格式

输入包含多组数据。

每组数据占一行,一个正数 n。

输出格式

每组数据输出一行,一个指数形式表示。

数据范围

1≤n≤20000,
每个输入最多包含 100 组数据。

输入样例:

1315

输出样例:

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

思路:
1315=2(7)+2(3)+2(0),求出1315的2的次方组合后我们还有求其中2的指数的组合,然后依次加入到括号当中所以用递归就直接可以求出来了。

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

string dfs(int x)
{
    string res;
    
    for(int i = 14; i >= 0; i --) // 因为最大值是20000,所以最多也就2的14次方
    {
        if(x >> i & 1)// 判断x的最高位,然后i就是其中2的指数
        {
            if(res.size()) res += \'+\';//在不为1的时候要用+号连接
        
            if(!i) res += "2(0)";//如果为0的话就加上2(0)
            else if(i == 1) res += "2";// 如果为1就加上2
            else res += "2(" + dfs(i) + ")";// 如果不为0或者1那么就代表我
            //们可以以将指数再分解,用2(dfs(i))这样的形式括起来,将i分解后的字符串加到答案中。
        }
    }
    
    return res;
}

int main()
{
    int n;
    
    while(cin >> n)
    {
        cout << dfs(n) << endl;
    }
    
    return 0;
}

以上是关于acwing 3483的主要内容,如果未能解决你的问题,请参考以下文章

一些特殊的矩阵快速幂 hdu5950 hdu3369 hdu 3483

AcWing 667. 游戏时间

AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)

AcWing 839. 模拟堆

AcWing 1855. 愤怒的奶牛(枚举+暴力)

AcWing 算法基础课 第六讲 贪心 总结