01串排序
时间: 1ms 内存:64M
描述:
将01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序
输入:
输入数据中含有一些01串,01串的长度不大于256个字符。
输出:
重新排列01串的顺序。使得串按基本描述的方式排序。
示例输入:
10011111
00001101
1010101
1
0
1100
示例输出:
0
1
1100
1010101
00001101
10011111
提示:
参考答案(内存最优[752]):
#include<stdio.h>
#include<string.h>
int main()
{
char a[256][256],str[256];
int i,j,k,m1,m2,n;
i=0;
while(scanf("%s",a[i])!=EOF)
{
i++;
}
for(j=0;j<i;j++)
for(k=j;k<i;k++)
{
if(strlen(a[j])>strlen(a[k]))
{
strcpy(str,a[j]);
strcpy(a[j],a[k]);
strcpy(a[k],str);
}
else if(strlen(a[j])==strlen(a[k]))
{
m1=0;
m2=0;
for(n=0;n<strlen(a[j]);n++)
{
if(a[j][n]=='1')
m1++;
if(a[k][n]=='1')
m2++;
}
if(m1>m2)
{
strcpy(str,a[j]);
strcpy(a[j],a[k]);
strcpy(a[k],str);
}
else if(m1==m2)
{
if(strcmp(a[j],a[k])>0)
{
strcpy(str,a[j]);
strcpy(a[j],a[k]);
strcpy(a[k],str);
}
}
}
}
for(j=0;j<i;j++)
printf("%s\n",a[j]);
return 0;
}
参考答案(时间最优[0]):
#include<stdio.h>
#include<string.h>
int main()
{
char a[256][256],str[256];
int i,j,k,m1,m2,n;
i=0;
while(scanf("%s",a[i])!=EOF)
{
i++;
}
for(j=0;j<i;j++)
for(k=j;k<i;k++)
{
if(strlen(a[j])>strlen(a[k]))
{
strcpy(str,a[j]);
strcpy(a[j],a[k]);
strcpy(a[k],str);
}
else if(strlen(a[j])==strlen(a[k]))
{
m1=0;
m2=0;
for(n=0;n<strlen(a[j]);n++)
{
if(a[j][n]=='1')
m1++;
if(a[k][n]=='1')
m2++;
}
if(m1>m2)
{
strcpy(str,a[j]);
strcpy(a[j],a[k]);
strcpy(a[k],str);
}
else if(m1==m2)
{
if(strcmp(a[j],a[k])>0)
{
strcpy(str,a[j]);
strcpy(a[j],a[k]);
strcpy(a[k],str);
}
}
}
}
for(j=0;j<i;j++)
printf("%s\n",a[j]);
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。