tj
查看原帖
tj
1146645
gsc_haha_freopen楼主2024/10/3 20:00
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <climits>

using namespace std;

// 判断表达式是否合法
bool isLegalExpression(const string& expr) {
    if (expr.empty()) return false;
    if (expr[0] == '0') return false; // 前导零
    for (size_t i = 0; i < expr.size(); ++i) {
        if (expr[i] == '0' && (i == 0 || expr[i-1] == '+')) return false; // 前导零
        if (expr[i] == '+' && (i == 0 || expr[i-1] == '+')) return false; // 连续加号
    }
    return true;
}

// 计算表达式的值
int evaluateExpression(const string& expr) {
    int sum = 0;
    int current = 0;
    for (char c : expr) {
        if (c == '+') {
            sum += current;
            current = 0;
        } else {
            current = current * 10 + (c - '0');
        }
    }
    sum += current;
    return sum;
}

// 生成所有可能的加号插入方案
void generateExpressions(const string& num, int index, string current, vector<string>& results) {
    if (index == num.size()) {
        if (isLegalExpression(current)) {
            results.push_back(current);
        }
        return;
    }
    // 不加加号
    generateExpressions(num, index + 1, current + num[index], results);
    // 加加号
    generateExpressions(num, index + 1, current + '+' + num[index], results);
}

int main() {
    string num;
    cin >> num;

    vector<string> expressions;
    generateExpressions(num, 0, "", expressions);

    int count = expressions.size();
    int maxSum = INT_MIN;
    int minSum = INT_MAX;
    int totalSum = 0;

    for (const string& expr : expressions) {
        int sum = evaluateExpression(expr);
        if (sum > maxSum) maxSum = sum;
        if (sum < minSum) minSum = sum;
        totalSum += sum;
    }

    cout << count << endl;
    cout << maxSum << " " << minSum << " " << totalSum << endl;

    return 0;
}

2024/10/3 20:00
加载中...