问题标题: 酷町堂:3826

0
0
已解决
李星泽
李星泽
初级光能
初级光能

有趣的排序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


0
已采纳
蔡程睿
蔡程睿
高级守护
高级守护

你现在做出来了吗

0
崔子周
崔子周
高级天翼
高级天翼

我不会,建议你去问猫尊 No.1杜承俊,他的经验值是:1624483

0
我要回答