Problem D. 早华寅的财富密码
Input file: standard input
Output file: standard output
Time limit: 1 second
Memory limit: 128 megabytes
早队在睡觉做梦的时候梦到自己发现了一个藏宝图,并根据藏宝图成功找到了宝藏的位置,现在他
在宝藏的入口处,入口的地上散布着一些碎片,好像是宝藏的钥匙,碎片上写着一个个数字,需要你拼成
一个最大的整数才能形成正确的钥匙打开宝藏入口的门,你能帮助早华寅拼好钥匙吗?
Input
第一行给定一个整数 n 代表下面有 n 个碎片
第二行给定 n 个正整数
保证输入的所有数据均不大于 1000
Output
输出一个整数作为答案
Example
standard input
2
3 30
standard output
330
standard input
8
1 3 30 305 346 5 58 8
standard output
85853463305301
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(string x,string y)
{
return (x+y)>(y+x);
}
int main()
{
int i,n;
cin>>n;
string str[n];
for(i=0;i<n;i++)
cin>>str[i];
sort(str,str+n,cmp);
for(i=0;i<n;i++)
cout<<str[i];
}
/*这道题一旦陷入常规思路会发现越想越复杂。
关键是要把其转换为数组排序的问题。
给定任意两个整数,设计一个比较规则,让其组成的整数最大。
其实也是很简单,比如a和b两个整数,
把他们两个分别前后拼接成两个整数,
再比较一下大小之后就知道谁大谁小。
举个例子就是3和30这两个整数;
用字符串拼接起来分别是303和330;
然后转换为整数再比较一次,发现330比303大,
也就是3拼在30前面比较大,那么就是说3比30要大。*/