牛客网刷题:数串

今天在牛客网刷题遇到数串问题:

        刚开始自己思路是取出每个数的第一位存入num_head数组,用log10()函数求出每个数的位数存入len数组(最后合成最大数时作为10的幂),依次找到num_head中最大到最小的数,以此来判断每个数的大小。这种方法很麻烦,且遇到首位数相同的数,需要继续判断后面的数,效率非常低。看了大神的代码,发现自己对于C++的掌握还停留在非常低的水平,对于很多库函数了解的太少了。下面贴上代码:

#include <vector>
#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    vector<string> sArray;
    string s;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> s;
        sArray.push_back(s);
    }
    sort(sArray.begin(), sArray.end(), [](string s1, string s2)   //也可以自己写个排序函数
    {return (s1 + s2) > (s2 + s1); });
    for (auto s : sArray)
        cout << s;
    return 0;
}

结果如下:

        

       

        C++11自带的sort函数,可对字符串进行排序。整道题采用字符串形式,合成字符串的时候只需将各个字符串相加就醒了,极大的提高了合成最大数时的效率,而数值型还需要考虑其他数是多少位才能乘以对应的倍数,非常麻烦。也可以自己写个排序函数,效果和sort函数一样,例如:

    for (int i = 0; i < n-1; i++)//把字符串从大到小排序
    {
        if (sArray[i] < sArray[i + 1])
        {
            s = sArray[i];
            sArray[i] = sArray[i + 1];
            sArray[i + 1] = s;
        }
     }   

总结:换种思路思考,多了解多调用库函数,可以极大地方便编程。

猜你喜欢

转载自blog.csdn.net/Rabit911/article/details/82858033