初级光能
有趣的排序2经验值:0
题目描述 Description
小明最近学习了很多的排序算法。老师想检验一下他的水平,给他出了一道题目:现在有n个字符串(包含空格)需要进行排序,先按照字符串中数字的个数从大到小排序,如果数字个数相同,再按照字母的个数从小到大排序,如果字母个数相同,则按照字典序进行排序。
输入描述 Input Description
第一行输入一个整数n(n<=10000)
接下来n行,每行输入一个字符串(不超过300位)
输出描述 Output Description
输出共n行
表示排序后的字符串
样例输入 Sample Input
3 abcdef123 123abcdef 12345abcdef
样例输出 Sample Output
12345abcdef 123abcdef abcdef123
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int h(string a){
int sum=0;
for(int i=0;i<a.size();i++){
if(a[i]>='0'&&a[i]<='9'){
sum++;
}
}
return sum;
}
int k(string a){
int cnt=0;
for(int i=1;i<=a.size()-1;i++){
if(a[i]>='A'&&a[i]<='Z'||a[i]>='a'&&a[i]<='z'){
cnt++;
}
}
return cnt;
}
bool cmp(string x,string y){
if(h(x)!=h(y)){
return h(x)>h(y);
}
else if(k(x)!=k(y)){
return k(x)>k(y);
}
return x<y;
}
int main(){
int n;
cin>>n;
string a[10005];
getline(cin,a[0]);
for(int i=1;i<=n;i++){
getline(cin,a[i]);
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<a[i]<<endl;
}
return 0;
}
哪错了???
(其实是着挺尴尬的以前做出来的题目现在不会了)
李星泽在2022-05-04 22:00:22追加了内容
https://ke.codingtang.com/#/problem/problemSub?show_id=0&id=3826
李星泽在2022-05-04 22:00:36追加了内容
https://ke.codingtang.com/#/problem/problemSub?show_id=0&id=3826