1. 程式人生 > >牛客網刷題:數串

牛客網刷題:數串

今天在牛客網刷題遇到數串問題:

        剛開始自己思路是取出每個數的第一位存入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;
        }
     }   

總結:換種思路思考,多瞭解多呼叫庫函式,可以極大地方便程式設計。