01串排序

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;
		
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注