题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的
一个。
例如输入数组{32, 321},则输出这两个能排成的最小数字 32132。
请给出解决问题的算法,并证明该算法。
/*
68.把数组排成最小的数。
题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的
一个。
例如输入数组{32, 321},则输出这两个能排成的最小数字 32132。
请给出解决问题的算法,并证明该算法。
对于m和n,我们需要确定一个排序方法使得m和n哪个更大,从而排序后输出
m和n排成的数字mn和nm,如果mn<nm,那么我们应该输出mn,也就是m应该排在n的前面,也就是m小于n;
反之,如果nm<mn,n小于m。如果mn==mn,m等于n。
这里用string处理比较好 可以直接加。
*/
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(const string& str1, const string &str2)
{
string s1=str1+str2;
string s2=str2+str1;
return s1<s2;
}
int main()
{
int num;
while(cin>>num,num)
{
string *str=new string[num];
for(int i=0;i<num;i++)
cin>>str[i];
sort(str,str+num,cmp);
for(int i=0;i<num;i++)
cout<<str[i];
cout<<endl;
delete[] str;
}
return 0;
}
/*
2
321 32
2
100 1
5
1 2 11 21 12
3
532 45 78
3
2 23 231
3
2 3 1
*/