PAT 1038

题目 : Recover the Smallest Number

分值 : 30
难度 : 中等题
思路 : 排个序,而A B谁在前面排序方式就按照 A+B 和 B+A去比较排序
坑点 : 解法较为巧妙,还有就是前面的 ‘0’ 要去除完
评语 : 想到就很简单,30分的题 25行代码就完事

具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <algorithm>
using namespace std ;
string s[10001] ;
bool cmp(string a , string b )
{
return a+b < b+a ;
}
int main() {
int N ;
cin>> N ;
for(int i = 0 ; i< N ; i++)
cin >>s[i] ;
sort(s,s+N ,cmp) ;
string answer ;
for(int i= 0 ; i< N ; i++)
answer += s[i] ;
int cur = 0 ;
while(answer[cur++] == '0');
if(cur-1==answer.size())
cout <<"0"<<endl ;
else
cout << answer.substr(cur-1)<<endl ;
return 0 ;
}