设有n个正整数(n ≤ 20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
输入描述:
第一行,一个正整数n。
第二行,n个正整数。
输出描述:
一个正整数,表示最大的整数
示例1
输入
复制
3
13 312 343
输出
34331213
//字符串之间的大小排序,也可以用sort函数来判断
修改com函数为:
int com(string a,stirng b)
return a+b>b+a;
就可以让a在b的前面
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
string a[30];
int com(string a,string b)
{
return a+b>b+a;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n,com);
for(int i=0;i<n;i++)
{
cout<<a[i];
}
return 0;
}
二维vector用sort:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
bool cmp(vector<int> a, vector<int> b)
{
if(a[0] != b[0]) return a[0] > b[0];
if(a[1] != b[1]) return a[1] > b[1];
if(a[2] != b[2]) return a[2] > b[2];
}
int main()
{
vector<vector<int>> vec = { {1,4,3}, {1,4,7} , {1,3,5} , {2,9,4} , {2,5,8} , {3,9,6} };
sort(vec.begin(), vec.end(), cmp);
for(auto p : vec)
cout<<p[0]<<' '<<p[1]<<' '<<p[2]<<endl;
return 0;
}
二维数组用sort比较麻烦:(用int **a 二维指针)
#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;
bool cmp(int *p,int *q)
{
if(p[0]==q[0])
{
if(p[1]==q[1])
{
return p[2]<q[2];
}
else return p[1]<q[1];
}
else return p[0]<q[0];
}
int main()
{
srand(time(0));
int i;
int **a=new int*[1000];
for(i=0;i<1000;++i)
{
a[i]=new int[3];
a[i][0]=rand()%1000;
a[i][1]=rand()%1000;
a[i][2]=rand()%1000;
//printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}
sort(a,a+1000,cmp);
/*cout<<"After sort"<<endl;
for(i=0;i<1000;++i)
{
printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}*/
return 0;
}