A1038 Recover the Smallest Number (30分).cpp

// A1038 Recover the Smallest Number (30分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
/*
题意:
1、给一些数字,组合一下,组个出个最小数字
注意:第一个数字不要为0

32小于321

解题:
1、k1 + k2 < k2 + k1,那么就把k1放在k2前面,但是用cmp如何实现呢
2、

learn && wrong:
1、k1 + k2 < k2 + k1,那么就把k1放在k2前面,但是用cmp如何实现呢
2、去掉前导的0如何实现呢,
ans[0] == 0,就查处,并且条件还有ans.size() != 0。之后再加个判断,如果size为0了,就直接为0
3、cmp函数的机制真的要理解下,并且sort,可以用于string,盲猜是不等式成绩,就按不等式的排列,不成立false,就返回相反的
4、erase()函数,是用迭代器,也就是ans.begin()
*/

#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

const int maxn = 10010;
string str[maxn];

bool cmp(string a, string b) {  //(!!!)
    return a + b < b + a;//如果a + b < b + a,就把a排在前面,反正就是小于号
}

int main()
{
    int num;
    cin >> num;
    for (int i = 0;i < num;++i) {
        cin >> str[i];
    }

    sort(str, str + num, cmp); //(!!!)

    string ans;
    for (int i = 0;i < num;++i) {
        ans += str[i];
    }

    while (ans.size() != 0 && ans[0] == '0') {///(!!!)
        ans.erase(ans.begin());
    }

    if (ans.size() == 0) cout << "0" << endl;
    else cout << ans << endl;
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容