Problem Description
所谓整数接力是指将n个正整数前后拼接成一个数。不同的接力方式将得到不同的结果。例如n=3时,3个正整数1,2,3的接力结果有:123,132,213,231,312,321。
编程任务:对于给定的n个正整数,请找出一种最佳的接力方式,使得采用该接力方式得到的正整数最大。
Input
第1行是一个正整数n(0<n<=10000),接下来有n行,每行1个参与接力的非负整数m(0<=m<2^31),n个整数不全为0.
Output
通过接力得到的最大正整数
Sample Input
3 1 2 3
Sample Output
321
Author
tianzuwei
思考:为求最大的数,那么也就是要把数字大的数放在前面,小的放在后面就可以了,数字大是指单个位(个十百千万)大的放在前面就可以了。我采用的失字符串形式,所以排序规则是,首先字典序排序,注意的地方就是当假设A串是B串的“子串” 这种形式A(1234) B(12344565) 不是A(1234) B(231234);是A串再B串的前面。这个时候,要以B串除开A串之后的部分为新串和A串比较,一次类推,一直得到A和B的大小。
程序:
#include<bits/stdc++.h>
using namespace std;
bool cmp(string str1, string str2)
{
int len1 = str1.length();
int len2 = str2.length();
int i, j;
for(i = 0, j = 0; i < len1 || j < len2; i++,j++)
{
if(i == len1 && j < len2) i = 0;
if(i < len1 && j == len2) j = 0;
if(str1[i] > str2[j]) return 1;
else if(str1[i] == str2[j]) ;
else return 0;
}
return 0;
}
int main()
{
// freopen("in.txt","r",stdin);
string str[101];
int n;
while(cin >> n)
{
int i;
for(i = 0; i < n; i++)
{
cin >> str[i];
}
sort(str,str+n,cmp);
for(i = 0; i < n; i++)
cout << str[i];
cout << endl;
}
fclose(stdin);
return 0;
}