• 数组组成的最小数字

题目描述: 给定一个整型数组,请从该数组中选择3个元素组成最小数字并输出(如果数组长度小于3,则选择数组中所有元素来组成最小数字)。

输入描述:

一行用半角逗号分割的字符串记录的整型数组,0 < 数组长度 <= 100,0 < 整数的取值范围 <= 10000。

输出描述:

由3个元素组成的最小数字,如果数组长度小于3,则选择数组中所有元素来组成最小数字。

示例1

输入

21,30,62,5,31

输出

21305

说明

数组长度超过3,需要选3个元素组成最小数字,21305由21,30,5三个元素组成的数字,为所有组合中最小的数字

示例2

输入

5,21

输出

215

说明

数组长度小于3, 选择所有元素来组成最小值,215为最小值。


C++题解

#include <bits/stdc++.h>
using namespace std;

bool compare(const pair<int, string> &a, const pair<int, string> &b)
{
    if (a.first != b.first) {
        return a.first < b.first;
    } else {
        return stoi(a.second) < stoi(b.second);
    }
}

int main()
{
    string str;
    cin >> str;
    vector<pair<int, string>> vec;
    string tmp;
    for (int i = 0; i < str.size(); i++) {
        while (isdigit(str[i])) {
            tmp += str[i];
            i++;
        }
        if (tmp != "") {
            vec.push_back(make_pair(tmp.size(), tmp));
            tmp.clear();
        }
    }
    stable_sort(vec.begin(), vec.end(), compare);
    string res;
    vector<string> strs(3);
    strs[0] = vec[0].second;
    strs[1] = vec[1].second;
    strs[2] = vec[2].second;
    
    sort(strs.begin(), strs.end());
    cout << strs[0] << strs[1] << strs[2] << endl;

    return 0;
}

(说明:题解是我自己写的,如果有错误,欢迎指出,一起交流下。谢谢!)