现在的位置: 首页 > 综合 > 正文

68 把数组排成最小的数

2018年05月02日 ⁄ 综合 ⁄ 共 754字 ⁄ 字号 评论关闭

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
*/

抱歉!评论已关闭.