社区讨论

20分求调

P1010[NOIP 1998 普及组] 幂次方参与者 3已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@mhk7l8um
此快照首次捕获于
2025/11/04 14:49
4 个月前
此快照最后确认于
2025/11/04 14:49
4 个月前
查看原帖
处理不好添加+号,只过了第二个样例,也就是说如果是2的一次方的而且这个数正好在一个括号内的最后一个数的话,就处理不好,会多添加一个加号,比方说
样例:73
输出:2(2(2)+2+)+2(2+2(0))+2(0)
CPP
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int n;
vector<string>res;

int check(int tmp)
{
    int i;
    for(i = 1; ; i ++)
    {
        if(tmp >> i == 0)break;
    }
    return i - 1;
}

void dfs(int n)
{
    int tmp = n & -n;
    if(tmp != 0)
    {
        //cout << tmp << endl;
        dfs(n - tmp);
        res.push_back("(");
        int t = check(tmp);
        if(t > 2)dfs(t);
        else res.push_back(to_string(t));
        res.push_back(")");
    }
}


int main()
{
    cin>>n;
    dfs(n);
    res.push_back("");
    //for(int i = 0; i < res.size(); i ++)cout << res[i];
    for(int i = 0; i < res.size(); i ++)
    {
        if(res[i] == "(" && res[i + 1] == "1")
        {
            cout << 2 << '+';
            i += 2;
        }
        else 
        {
            if(res[i] == "(")cout << 2;
            if(res[i] != "1")cout << res[i];
            if(res[i] == ")" && res[i + 1] != ")" && res[i + 1] != "")
            cout << '+';
        }
    }
}

回复

9 条回复,欢迎继续交流。

正在加载回复...