题目大意:给你一个n,之后给n个数字,问你咋拼数字才能让数字变最大
思路:贪心,自定义排序,两种方法
法一:利用字符串一个个位的数字进行比较,如果大的就往前排,小的就往后排,如果两个数字前几位数字相同并且一个数字全部已经比较过后就用这个数字的最后一位跟下个数字的下一位进行比较。
法二:看了别人的题解,直接把字符串加起来进行比大小就行了,这个操作会简单(但我一开始就想到第一种方法emmmm
法一代码如下:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(string a,string b){
int len=min(b.size(),a.size());
int i;
for(i=0;i<len;i++){//一个位数一个位数的进行比较
if(a[i]!=b[i])return a[i]>b[i];
}
if(a.size()>b.size()){//如果前面比较数字全相同,比较短的那个最后一位跟长的那个数字的下一位
return a[i]>b[i-1];
}else return a[i-1]>b[i];
}
string a[21];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
cout<<a[i];
}
return 0;
}
法二代码:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(string a,string b){
return a+b>b+a;
}
string a[21];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
cout<<a[i];
}
return 0;
}</algorithm></string></iostream></algorithm></string></iostream>