洛谷p1012拼数题解

Tips:大佬绕道不耽误您宝贵时间,以下仅分享了我在写题时的思路。

在第一眼看到这个题的时候,第一想法还是排序,不过显然此时不在应该按照整数排序而是按照字符串来进行排序然后按顺序输出。于是理所应当地写出下面这一段代码:

#include
#include
#include
const int N=30;
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    string arr[N];
    for(int i=0;i>arr[i];
    sort(arr,arr+n);

//一开始不想写函数就让数组倒序输出了
    for(int i=n-1;i>=0;i--) cout<     return 0;
 } 

提交后发现有一个样例没过,思索后发现如果比较的两个字符串长度不一样但是短字符串和长字符串对应的字符数字一样时发现了问题,例如121和12,理想情况下我们应该是想得到12312但是在字符串比较时会判定为121>12由此拼接的话会得到12112,显然这不是我们想要的结果,于是开始思考这种思路如何处理这种情况,第一思路再将长字符串数字比短字符串数字多的那些数字再和短字符串数字进行比较,但想了想发现这种思路很复杂,并且这不就是模拟吗,但由于本蒟蒻智商低下,一时间没想到两个字符串直接相加,之后坐那儿想了一会才想到直接字符串相加比较就是。

附上ac代码:

#include
#include
#include
const int N=30;
using namespace std;
bool cmp(string x,string y){
    return x+y }
int main()
{
    int n;
    scanf("%d",&n);
    string arr[N];
    for(int i=0;i>arr[i];//这里如果用scanf会有错误 
    sort(arr,arr+n,cmp);
    for(int i=n-1;i>=0;i--) cout<     return 0;
 } 

ac之后去看了题解,有的就是用这个解法,看还有人说贪心但由于本蒟蒻还没学到就不介绍了。

---------------------------------------------------------------------------------------------------------------------------------

这也是我第一次写题解,更多的还是写给自己看看。

你可能感兴趣的:(算法,数据结构,c++)