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;
}
浙公网安备 33010602011771号