題目描述設(shè)有n個(gè)正整數(shù),將他們連接成一排,組成一個(gè)最大的多位整數(shù)。 如:n=3時(shí),3個(gè)整數(shù)13,312,343,連成的最大整數(shù)為34331213。 如:n=4時(shí),4個(gè)整數(shù)7,13,4,246連接成的最大整數(shù)為7424613。 輸入描述:有多組測試樣例,每組測試樣例包含兩行,第一行為一個(gè)整數(shù)N(N<=100),第二行包含N個(gè)數(shù)(每個(gè)數(shù)不超過1000,空格分開)。 輸出描述:每組數(shù)據(jù)輸出一個(gè)表示最大的整數(shù)。 ///////////////////////// 自己的思路(失敗) ////////////////////// #include<iostrem> using namespace std; int FirstNumber(int a) { int first=0; while(a!=0) { first=a%10; a/=10; } return first; } int main() { int n; cin>>n; int *p=new int[n]; //存輸入的數(shù) int *p1=new int [n]; //存下標(biāo) for(int i=0;i++;i<n) { cin>>p[i]; p1[i]=FirstNumber(p[i]); } int temp=0; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { if(p1[i]>p1[j]) } } } ////////////////////////////// 別人的 ////////////////////////// sort(sArray.begin(), sArray.end(), [](string s1, string s2){ return (s1+s2) > (s2+s1); }); 也可寫為: bool campare(string i ,string j){ return (i+j)>(j+i); } sort(temp.begin(),temp.end(),campare); //////////////////////////////////////////////////////////////////////////////////// 其實(shí)很簡單,舉個(gè)例子你就知道了: s1 = "21"; s2 = "2"; 這時(shí)s1 > s2,但是s1 + s2 = "212"卻沒有s2 + s1 = "221"大 /////////////////////////////////////////////////// #include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; bool compare(string s1, string s2) { return (s1 + s2) > (s2 + s1); } int main() { int n=4; //cin >> n; vector<string >a={"7","13","4","246"}; string temp ; /* for (int i = 0; i < n; i++) { cin >> temp; a.push_back(temp); } */ sort(a.begin(), a.end(), compare); for (auto i : a) { cout << i;//7424613 } system("pause"); return 0; } 1
|
|