1 条题解

  • 1
    @ 2022-7-19 16:21:56
    #include<bits/stdc++.h>
    using namespace std;
    bool cmp(string a,string b) {
    	int l1=a.length(),l2=b.length(),l;
    	string k,c;
    	l=l1>l2?l2:l1;
    	for(int i=0; i<l; i++) {
    		if(a[i]==b[i])continue;
    		else return a[i]>b[i];
    	}
    	k=(l1>l2?a:b);
    	c=(l1>l2?b:a);
    	if(k[l]>a[0])return k<c;
    	return l1<l2;
    }
    int main() {
    	int n;
    	string a[10086];
    	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];
    }
    

    待会儿讲一下cmp 来了。

    bool cmp(string a,string b) {
    int l1=a.length(),l2=b.length(),l;
    	string k,c;
    	l=l1>l2?l2:l1;
    	for(int i=0; i<l; i++) {
    		if(a[i]==b[i])continue;
    		else return a[i]>b[i];
    	}
    	k=(l1>l2?a:b);
    	c=(l1>l2?b:a);
    	if(k[l]>a[0])return k<c;
    	return l1<l2;
    }
    

    首先这个自定义函数是作为bool类型在sort中被应用的。因此他的形参为两个字符串。 对于给定的几个数字字符串,我想到的尽可能大的排序方式是这样的:

    1. 从第一位开始比较,若第a[n]>b[n],那么便输出a,b;如32与23。3223>2332. 321与23,32123>23321.

    2. 如果可以两数位数不对等,且可以比较的位数都相等呢?由于在输出时,总是先输出a在输出b的。若前n位都相同,那么就比较n+1位是否大于第一位。如325和32。5>3因此32532>32325.

      这其实就是所有的思路了。实现成代码,就是cmp函数了。

    信息

    ID
    227
    时间
    1000ms
    内存
    64MiB
    难度
    7
    标签
    递交数
    33
    已通过
    8
    上传者