【华为机试-100/中等】最小数字

  • 数组组成的最小数字

题目描述: 给定一个整型数组,请从该数组中选择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;
}

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

全部评论

相关推荐

阿武同学:基本信息保留前面三行,其他的可以全部删掉,邮箱最重要的你没写,主修课程精简到8个以内,实习里面2/3/4都是水内容的,非要写的话建议两到三句话,项目经历排版优化下,自我评价缩到三行
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务