当前位置: 移动技术网 > 移动技术>移动开发>IOS > PAT A1038 Recover the Smallest Number (30)

PAT A1038 Recover the Smallest Number (30)

2020年07月15日  | 移动技术网移动技术  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网