68.把数组排成最小的数。
题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的
一个。
例如输入数组{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 */