PAT甲级——1038 Recover the Smallest Number——分数 30

题目

题目大意:将一堆数字进行组合,选出值最小的那组


解法1

点击查看代码
#include<iostream>       // 输入输出流
#include<vector>         // 使用 vector 容器
#include<algorithm>      // 使用 sort 函数
using namespace std;

// 自定义排序规则:如果 a + b 小于 b + a,则 a 应该排在 b 前
bool cmp(const string &a, const string &b) {
    return a + b < b + a;
}

int main() {
    int n;
    cin >> n; // 读取数字段数量

    vector<string> seg(n); // 存储字符串形式的数字段
    for (int i = 0; i < n; ++i) {
        cin >> seg[i]; // 输入每一段
    }

    sort(seg.begin(), seg.end(), cmp); // 按自定义规则排序

    string result;
    for (int i = 0; i < n; ++i) {
        result += seg[i]; // 拼接排序后的段
    }

    // 去除前导0(但至少保留一个0)
    int idx = 0;
    while (idx < result.size() - 1 && result[idx] == '0') {
        ++idx;
    }

    cout << result.substr(idx) << endl; // 输出结果
    return 0;
}

posted on 2025-05-13 09:46  LEESOL-cn  阅读(8)  评论(0)    收藏  举报

导航