题目描述
将 01 串首先按长度排序,长度相同时,按 1的个数多少进行排序,1的个数相同时再按 ASCII 码值排序。
输入
输入数据中含有一些 01 串,01 串的长度不大于 256 个字符。
输出
重新排列 01 串的顺序。使得串按基本描述的方式排序。
输入输出
输入 #1
10011111
00001101
1010101
1
0
1100
样例输出 #1
0
1
1100
1010101
00001101
10011111
参考解答:
#include<iostream>
using namespace std;
#include<algorithm>
#include<string>
//01排序
bool compare(string str1,string str2)
{
int num1=0, num2=0;
if(str1.length() != str2.length())
return str1.length() < str2.length();
else
{
for(int i=0;i<str1.length();i++)
if(str1[i] == '1')
num1++;
for(int i=0;i<str2.length();i++)
if(str2[i] == '1')
num2++;
if(num1 != num2)
return num1 < num2;
else
return atoi(str1.c_str()) < atoi(str2.c_str());
}
}
int main()
{
string s[10000];
string tmp;
int N = 0;
while(cin>>tmp)
s[N++] = tmp;
sort(s, s+N, compare);
for(int i=0;i<N;i++)
cout<<s[i]<<endl;
return 0;
}