PAT A1038 Recover the Smallest Number (30)
程序员文章站
2022-06-23 09:36:50
PTA跳转:原题链接题目大意:给定N组数字串,找出这些数字串中能组合出的最小数字。例如,给出【32, 321, 3214, 0229, 87】,可以得到很多类似【32-321-3214-0229-87】或【0229-32-87-321-3214】这样的数字串。其中,【0229-32-87-321-3214】是最小的,输出【22932132143287】即完成此题。(消去"-"和开头的0)想了很久如何排序,无解。看了柳神的代码,甘拜下风。#include #includ...
PTA跳转:原题链接
题目大意:给定N组数字串,找出这些数字串中能组合出的最小数字。例如,给出【32, 321, 3214, 0229, 87】,可以得到很多类似【32-321-3214-0229-87】或【0229-32-87-321-3214】这样的数字串。其中,【0229-32-87-321-3214】是最小的,输出【22932132143287】即完成此题。(消去"-"和开头的0)
想了很久如何排序,无解。看了柳神的代码,甘拜下风。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(string a, string b)
{
//因为a+b和b+a的长度是一样的,可以进行比较,而且每次排序后,前面的字符串总要小于后面(比较ASCII码)
return a + b < b + a;
}
string str[10010];
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
cin >> str[i];
sort(str, str + n, cmp); //即可得到答案(首数字可能是0,还需要进一步操作)
string s;
for(int i = 0; i < n; i++)
s += str[i];
while(s.length() != 0 && s[0] == '0') //长度不为0,但首数字为0
s.erase(s.begin()); //把在开头的数字0删掉
if(s.length() == 0) //字符串中全是数字0,全删了
cout << 0;
cout << s;
return 0;
}
氷鸢鸢鸢
2020.7.13
本文地址:https://blog.csdn.net/koori_145/article/details/107324326