高级启示者
#include<bits/stdc++.h>
using namespace std;
string a[10010];
string tq(string s){
string z;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9')
z=z+s[i];
}
return z;
}
int sz(string z){
int sum=0;
for(int i=0;i<z.size();i++){
if(z[i]>='0'&&z[i]<='9')
sum+=z[i]-'0';
}
return sum;
}
bool cmp(string x,string y){
if(sz(x)!=sz(y))
return sz(x)>sz(y);
else if(tq(x)!=tq(y))
return tq(x)<tq(y);
return x<y;
}
int main(){
int n;
cin>>n;
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;
}
哪错了?
缔造者
函数核心
int cnt=0;
for(int i=0;i<=s.size()-1;i++){
if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z'){
cnt++;
}
}
return cnt;
}
bool cmp(string x,string y){
if(count(x)!=count(y))
return count(x)<count(y);
return x<y;
}
主函数核心
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;
}
缔造者之神
给两个重要的函数:
int zm(string a){
cnt1=0;
for(int i=0;i<a.size();i++){
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
cnt1++;
}
return cnt1;
}
bool cmp(string a,string b){
if(zm(a)!=zm(b)){
return zm(a)<zm(b);
}
return a<b;
}
望采纳!
初级天翼
你搞那么多函数干啥?还有,这代码和题目完全对不上,这代码是有趣的是排序3,你这题是字符串排序2,你......
思路:定义n和字符串数组s[10010],bool cmp(string a,string b),在函数里定义cnta和cntb,遍历字符串a,判断a[i]是字母,cnta++(字符串b同理),之后判断cnta!=cntb,返回cnta>cntb,否则返回a<b//主函数外
-------------------分-----------------------------割---------------------------线-------------
输入n,getline(cin,s[0])吃换行,再循环getline一个s[i],循环后sort排序,最后循环输出s[i]//主函数内
即可AC
望采纳~
修练者
这可真是一道可怕的题!代码奉上!
string a[10005];
整型 count(string s){
整型 cnt=0;
循环(int i=0;i<s.size();i++){
如果(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') cnt++;
}
return cnt;
}
bool cmp(string a,string b){
如果(count(a)!=count(b))
return count(a)<count(b);
return a<b;
}
int main(){
整型 n;
输入>>n;
getline(cin,a[0]);
循环(int i=1;i<=n;i++){
getline(cin,a[i]);
}
排序(a+1,a+n+1,cmp);
循环(int i=1;i<=n;i++){
输出<<a[i]<<endl;
}
AC100 望采纳!