0
已解决
被禁言
中级光能
3983
急急急!!!
本人的0分代码:
#include<bits/stdc++.h>
using namespace std;
string a[110000];
int n;
int sz(string s){
int cnt=0;
for(int i=0;i<s.size();i++){
if(s[i]>='a'&&s[i]<='z'){
cnt++;
}
}
return cnt;
}
bool cmp(string x,string y){
if(sz(x)!=sz(y))
return sz(x)>sz(y);
return x<y;
}
int main(){
string b;
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;
}
找错!!!
---------------------------------------------------------------
不要整段代码
何冯成在2020-03-29 08:26:59追加了内容
@刘廷钰
还是0分:
#include<bits/stdc++.h>
using namespace std;
string a[110000];
int n;
int sz(string s){
int cnt=0;
for(int i=0;i<s.size();i++){
if(s[i]>='a'&&s[i]<='z'){
cnt++;
}
}
return cnt;
}
bool cmp(string x,string y){
if(sz(x)!=sz(y))
return x<y;
return x<y;
}
int main(){
string b;
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;
}
何冯成在2020-03-29 13:09:19追加了内容
@龙舟
你禁言多少天
1
已采纳
我来啦!~~
if(s[i]>='a'&&s[i]<='z')改成if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z')
return sz(x)>sz(y);
return x<y;
改成两个都是<
ac!!
望采纳!
0
我一开始也是这样写的,应该两个都是x<y
刘廷钰在2020-03-28 22:18:05追加了内容
还有这题样例好像有问题
刘廷钰在2020-03-28 22:19:24追加了内容
bool cmp里两个都应该是 return x<y;
0
0
1th:字母不可能只是小写,又有可能是大写
2nd:cin>>n以后要读入一个换行符,加上getchar();
3rd:你下标是从0开始的,sort以及输出循环都是把下标当从一开始得了
4th:cmp函数里第一个return是按字母的个数,不是按字典序,的改成用sz<sz这种格式
PS:最好用结构体。
0
0
