牛客網刷題:數串
今天在牛客網刷題遇到數串問題:
剛開始自己思路是取出每個數的第一位存入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;
}
}