Note 贪心卡了好久…(枯了)不是按照字典序排列就可以的,必须保证两个字符串构成的数字是最小的才行,所以cmp函数写成 return a + b < b + a 的形式,保证它排列按照能够组成的最小数字的形式排列。注意:如果移出了0之后发现s.length() == 0了,说明这个数是0,那么要特别地输出这个0,否则会什么都不输出。 Code: #include<bits/stdc++.h> using namespace std; bool compare(string a,string b){ return a+b<b+a; } string str[10010]; int main(){ #ifndef ONLINE_JUDGE freopen("data.txt","r",stdin); #endif int n; scanf("%d",&n); for(int i=0;i<n;i++) cin>>str[i]; sort(str,str+n,compare); string res=""; for(int i=0;i<n;i++) res+=str[i]; int p=0; while(res[p]=='0') p++; res=res.substr(p); if(res.length()==0) cout<<0; //! else cout<<res; return 0; }