我發現可以使用sort(vec.begin(),vec.end(),cmp)寫出這一題,大家可以往這個方向想。第一次這樣用覺得神奇!!
#include <bits/stdc++.h>
#include <sstream>
#define ll long long
#define endl '\n'
using namespace std;
bool cmp2(string a,string b){
if(b.size()==a.size()){
for(int i=0;i<b.size();i++){
if(a[i]==b[i])continue;
elsereturn b[i]>a[i];
}
}
return b.size()>a.size();
}
bool cmp1(string a,string b){
if(a.size()==b.size()){
for(int i=0;i<b.size();i++){
if(a[i]==b[i])continue;
else return a[i]>b[i];
}
}
return a.size()>b.size();
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);
int num;
string s;
vector<string> vec1,vec2;
while(cin >> num){
vec1.clear();
vec2.clear();
for(int i=0;i<num;i++){
cin >> s;
if(s[0]=='-'){
vec1.push_back(s);
}
else{
vec2.push_back(s);
}
}
sort(vec2.begin(),vec2.end(),cmp2);
sort(vec1.begin(),vec1.end(),cmp1);
for(int i=0;i<vec1.size();i++){
cout << vec1[i] << endl;
}
for(int i=0;i<vec2.size();i++){
cout << vec2[i] << endl;
}
}
return 0;
}