PAT.A1038 Recover the Smallest Number

返回目录在这里插入图片描述

题意

给出若干个字符串,将它们按照某个顺序拼接,求最小的生成数

样例(可复制)

5 32 321 3214 0229 87

样例输出

22932132143287

提供几个易错样例

3
00 000 0000
//output 0
3
00 002 000
//output 2
3
0020 000 000
//output 20

注意点

  1. 本题贪心思想体现在cmp函数里,若a+b<b+a,则让a在前面,这样全局的数字也会最小
  2. 输出时需要剔除前面的0,所以先用ans将字符串拼起来再输出,string可以直接用+号拼接
#include <bits/stdc++.h>
using namespace std;

string num[10010];
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>>num[i];
    sort(num,num+n,cmp);
    string ans;
    for(int i=0;i<n;i++)ans+=num[i];
    while(ans.size()!=0&&ans[0]=='0')ans.erase(ans.begin());
    if(ans.size()==0)cout<<0;
    else cout<<ans;
	return 0;
}
发布了137 篇原创文章 · 获赞 4 · 访问量 6035

猜你喜欢

转载自blog.csdn.net/a1920993165/article/details/105324643