排序
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2200 Accepted Submission(s): 537
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是对这些分割得到的整数依从小到大的顺序排序。
你的任务是对这些分割得到的整数依从小到大的顺序排序。
Input
输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
输出数据也只有一行,是分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开。
Sample Input
0051231232050775
Sample Output
0 77 12312320
#include <stdio.h>
#include <string.h>
#define MAX 1001
long a[MAX]={0};
int la=0,lst=0 ;
char c,st[MAX]={'/0'};
int la=0,lst=0 ;
char c,st[MAX]={'/0'};
long pow_10(int x)
{
long res=1,i;
for(i=1 ; i<= x ; i++)
res *= 10 ;
return res ;
}
{
long res=1,i;
for(i=1 ; i<= x ; i++)
res *= 10 ;
return res ;
}
void makerp()
{
int i,j,rp ;
la ++ ;
for(i= 1,j=lst;i<= lst ; i++,j--)
if ( (rp = st[i]-'0') > 0)
a[la] += rp*pow_10(j-1) ;
}
{
int i,j,rp ;
la ++ ;
for(i= 1,j=lst;i<= lst ; i++,j--)
if ( (rp = st[i]-'0') > 0)
a[la] += rp*pow_10(j-1) ;
}
void sort()
{
int i,j,t ;
for(i=1 ; i< la ; i++)
for(j=i+1 ; j<=la ; j++)
if (a[j] < a[i])
{
t = a[j] ;
a[j] = a[i] ;
a[i] = t ;
}
}
{
int i,j,t ;
for(i=1 ; i< la ; i++)
for(j=i+1 ; j<=la ; j++)
if (a[j] < a[i])
{
t = a[j] ;
a[j] = a[i] ;
a[i] = t ;
}
}
int main(void)
{
int s=0,t=0;
int i,j,k ;
while ( ( c=getchar()) != '/n')
{
if ( c == '5')
{
if ( lst > 0)
{
makerp();
memset(st,'/0',sizeof(st));
lst = 0 ;
}
while( (c = getchar()) != '5' && c != '/n')
st[++lst] = c ;
if ( lst > 0)
{
makerp();
memset(st,'/0',sizeof(st));
lst = 0 ;
}
}
else if(c != '/n')
{
st[++lst] = c ;
}
if ( c =='/n')
break ;
}
if ( lst > 0)
{
makerp();
memset(st,'/0',sizeof(st));
lst = 0 ;
}
sort();
for(i=1 ; i<= la ; i++)
printf("%ld ",a[i]);
printf("/n");
system("pause");
return 0 ;
}
int i,j,k ;
while ( ( c=getchar()) != '/n')
{
if ( c == '5')
{
if ( lst > 0)
{
makerp();
memset(st,'/0',sizeof(st));
lst = 0 ;
}
while( (c = getchar()) != '5' && c != '/n')
st[++lst] = c ;
if ( lst > 0)
{
makerp();
memset(st,'/0',sizeof(st));
lst = 0 ;
}
}
else if(c != '/n')
{
st[++lst] = c ;
}
if ( c =='/n')
break ;
}
if ( lst > 0)
{
makerp();
memset(st,'/0',sizeof(st));
lst = 0 ;
}
sort();
for(i=1 ; i<= la ; i++)
printf("%ld ",a[i]);
printf("/n");
system("pause");
return 0 ;
}