- 数组组成的最小数字
题目描述: 给定一个整型数组,请从该数组中选择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;
}
(说明:题解是我自己写的,如果有错误,欢迎指出,一起交流下。谢谢!)