贪心。
给你n个数字让你输出他们合起来的最大数字,任意排列。
就是让尽可能让每一位都最大。比如9和90应该让9排在前面。
用STL和重载。不过重载的cmp注意不能写成如果两个数前面相等,然后比较那个长的数后面和那个短的数。
如:
A1A2A3A4A5A6B1B2B3B4
B1B2B3B4A1A2A3A4A5A6
我刚开始做,比较完前4个之后,然后用A5和B1(即又重复比B)直到比完A数字。不过这样的话全部相等,然后后面没处理。
如: 123412 和1234。应该为1234123412。
直接比较A+B和B+A即可。
#include<cstdio>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
bool cmp(string a,string b){
return a+b>b+a;
}
const int MAXN=50+5;
string a[MAXN];
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;
while(~scanf("%d",&n)){
if(n==0) break;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n,cmp);
for(int i=0;i<n;i++) cout<<a[i];
printf("\n");
}
return 0;
}