4A - 排序

时间:2023-03-09 01:11:08
4A - 排序
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。 
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。 

Input

输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。   
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。

Output

对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。

Sample Input

0051231232050775

Sample Output

0 77 12312320

// 忘记考虑两个5之间没有数字的情况
 #include<stdio.h>
#include<stdlib.h>
#include<string.h> void selc_sort(int a[], int len, int flag)
{
int i, j, t, min;
for(i=;i<len-;i++)
{
min=i;
for(j=i+;j<len;j++)
if(a[min]>a[j]) min=j;
if(min!=i)
{ t=a[i]; a[i]=a[min]; a[min]=t; }
}
if(flag)
{
for(i=;i<len/;i++)
{ t=a[i]; a[i]=a[len--i]; a[len--i]=t; }
}
} int main()
{
char a[], *p;
int b[], len, i, flag, length;
while(scanf("%s", a)!=EOF)
{
len=;
for(p=a;*p;p++)
if(*p=='')
{
*p='\0';
len++;
}
if(*(p-)) len++;
p=a;
for(i=;i<len;i++)
{
flag=;
while(*p=='')
{
p++;
if(*p=='\0')
{ flag=; break; }
}
if(flag)
{ b[i]=atoi(p); length=strlen(p)+; p+=length; }
else
{ b[i]=; p++;}
}
selc_sort(b,len,);
for(i=;i<len;i++)
{
if(i==len-) printf("%d\n", b[i]);
else printf("%d ", b[i]);
}
}
return ;
}

WA

 #include<stdio.h>
#include<stdlib.h>
#include<string.h> void shell_sort(int a[], int len)
{
int i, j, t, gap;
for(gap=len/;gap>;gap--)
for(j=gap;j<len;j++)
for(i=j;i-gap>=&&a[i]<a[i-gap];i-=gap)
{ t=a[i]; a[i]=a[i-gap]; a[i-gap]=t; }
} int main()
{
char a[], *p;
int b[], len, i, flag, length;
while(scanf(" %s", a)!=EOF)
{
len=;
for(p=a;*p;p++)
if(*p=='')
{
*p='\0';
len++;
}
if(*(p-)) len++;
p=a;
for(i=;i<len;i++)
{
flag=;
while(*p=='')
{
p++;
if(*p=='\0')
{ flag=; break; }
}
if(flag)
{
if(strlen(p))
{ b[i]=atoi(p); length=strlen(p)+; p+=length; }
else
{ p++; i--; len--; }
}
else
{ b[i]=; p++;}
}
shell_sort(b,len);
for(i=;i<len;i++)
{
if(i==len-) printf("%d\n", b[i]);
else printf("%d ", b[i]);
}
}
return ;
}

AC