- Description
将01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序。
- Input
输入数据中含有一些01串,01串的长度不大于256个字符。
- Output
重新排列01串的顺序。使得串按基本描述的方式排序。
- Sample Input
10011111
00001101
1010101
1
0
1100
- Sample Output
0
1
1100
1010101
00001101
10011111
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const char *a,const char *b)
{
int l1=strlen(a),l2=strlen(b),count1=0,count2=0;
if(l1-l2)
return l1-l2;
else
{
int i;
for(i=0;i<l1;i++)
if(a[i]=='1')
count1++;
for(i=0;i<l2;i++)
if(b[i]=='1')
count2++;
if(count1-count2)
return count1-count2;
else
return strcmp(a,b);
}
}
int main()
{char str[200][276];
int i=0,j;
while(scanf("%s",str[i])!=EOF)i++;
qsort(str,i,sizeof(str[0]),cmp);
for(j=0;j<i;j++)
puts(str[j]);
return 0;
}
本文介绍了一种针对01串的特殊排序算法,该算法首先依据字符串长度进行排序,长度相同的情况下比较1的数量,数量一致时则进一步通过ASCII码值进行排序。文章提供了完整的C语言实现代码。
1591





