将 01 串首先按长度排序,长度相同时,按 1 的个数多少进行排序, 1 的个数相同时再 按 ASCII 码值排序。

来源:互联网 发布:简历软件犯法吗 编辑:程序博客网 时间:2024/06/10 04:12
#include <fstream>#include <iostream>#include <string>#include <set>#include <algorithm>using namespace std;struct Comp{    bool operator()(const string &s1,const string &s2)    {        if(s1.length()!=s2.length())return s1.length()<s2.length();//判断长度        int c1=count(s1.begin(),s1.end(),'1'); //统计1的个数        int c2=count(s2.begin(),s2.end(),'1');        return (c1!=c2?c1<c2:s1<s2);   //返回1的个数较多的    }};int main(int argc, char* argv[]){    multiset<string,Comp>ms;    string s;    while(cin>>s&&s!="0") //以0作为结束符    {        ms.insert(s);    }    for(multiset<string,Comp>::iterator it=ms.begin(); it!=ms.end(); it++)  //遍历输出    {        cout<<*it<<endl;    }    return 0;}
1 0
原创粉丝点击