题目1504:把数组排成最小的数

来源:互联网 发布:js的 math.hypot方法 编辑:程序博客网 时间:2024/05/20 13:08
题目描述:

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

输入:

输入可能包含多个测试样例。
对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。
输入的第二行包括m个正整数,其中每个正整数不超过10000000。

输出:

对应每个测试案例,
输出m个数字能排成的最小数字。

样例输入:
323 13 6223456 56
样例输出:
132362345656
/*思路:简单的按字典排序,注意是在cmp函数内,通过字典比较的时候,没分出结果时,我的处理是:string aa = a, bb = b ;aa = a + b ;bb = b + a;if(aa<bb)return true ;elsereturn  false ;*/#include<iostream>#include<algorithm>#include<string>#define MAX 102using namespace std ;bool cmp (string a , string b ){int i ;int lena = a.size() , lenb = b.size() , max1 = 0  ;max1 = lena > lenb ? lena : lenb ;for( i = 0  ; i < max1 ; i ++){if(a[i%lena] > b[i%lenb])return false;if(a[i%lena] < b[i%lenb])return true ;}/*按字典比较,没有分出顺序时的处理*/string aa = a, bb = b ;aa = a + b ;bb = b + a;if(aa<bb)return true ;elsereturn  false ;}int main(void){int n ;while(cin >> n ){int i ;string a[MAX] ;for(i = 0 ; i < n ; i++)cin >> a[i] ;sort(a , a + n , cmp );for( i = 0 ; i < n ; i++)cout<< a[i];cout<<endl;}return 0 ;}/*3100 1001 1000421001 100112100110 1001*/