3413:【例71.2】 01串排序
[例 71.2] 01 串排序
//01串排序
#include <bits/stdc++.h>
using namespace std;
struct Comp
{
bool operator()(const string &s1,const string &s2)const
{
if(s1.length()!=s2.length())//先按长度排序
return s1.length()<s2.length();
int c1=count(s1.begin(),s1.end(),'1');
int c2=count(s2.begin(),s2.end(),'1');
return c1!=c2?c1<c2:s1<s2;//按1的个数排序,若相同按ASCII码排序
}
};
int main()
{
//freopen("Sort01.in","r",stdin);
//freopen("Sort01.out","w",stdout);
multiset<string,Comp>ms;
int n;
cin>>n;
string s;
for(int i=1; i<=n; i++)
{
cin>>s;
ms.insert(s) ;
}
for(multiset<string,Comp>::iterator it=ms.begin(); it!=ms.end(); it++)
cout<<*it<<endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
bool cmp(string x,string y){
int lx=x.size(),ly=y.size();
int ox=0,oy=0;
for(int i=0;i<lx;i++) ox+=x[i]-48;
for(int i=0;i<ly;i++) oy+=y[i]-48;
return lx<ly||
lx==ly&&ox<oy||
lx==ly&&ox==oy&&x<y;
}
int main()
{
int n;string a[105];
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n,cmp);
for(int i=0;i<n;i++) cout<<a[i]<<endl;
return 0;
}
《信息学奥赛一本通 编程启蒙C++版》3391-3395(5题)
《信息学奥赛一本通 编程启蒙C++版》3396-3400(5题)
《信息学奥赛一本通 编程启蒙C++版》3396-3400(5题)_3400:【例69.3】 字符串中的空格-CSDN博客
《信息学奥赛一本通 编程启蒙 C++版》 3391-3400(10题)
《信息学奥赛一本通 编程启蒙 C++版》 3391-3400(10题)_3391:【例68.2】 简单密码-CSDN博客
《信息学奥赛一本通 编程启蒙C++版》3401-3405(5题)
《信息学奥赛一本通 编程启蒙C++版》3406-3410(5题)
41、《信息学奥赛一本通 编程启蒙 C++版》 3401-3410(10题)
41、《信息学奥赛一本通 编程启蒙 C++版》 3401-3410(10题)_3407:【例70.2】 求a-b字符串-CSDN博客
《信息学奥赛一本通 编程启蒙C++版》3411-3415(5题)