76 分割数字并排序
作者: xxx时间限制: 1S章节: 字符串
问题描述 :
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
输入说明 :
输入包含多组测试用例,第一行,测试案例个数,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
输出说明 :
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
输入范例 :
2
0051231232050775
4000050005045453356356456454564567677686564654
输出范例 :
0 77 12312320
0 4 4 4 4 33 63 64 64 64 646 40000 67677686
解答思路:
这一题注意最后一个数读取时不要越界越出数组就好。
AC代码
#include <cstdio>
#include <cstring>
int main(){
int n;
scanf("%d",&n);
getchar();
while(n--)
{
char a[1050];
gets(a);
int num[500];
int i_num=0;
for(int i=0;i<strlen(a);i++)
{
if(a[i]!='5')
{
int number=0;
int len=0;
for(int j=i;j<strlen(a);j++)
{
if(a[j]!='5')
{
number=(number*10)+(a[j]-'0');
len++;
}
else
{
break;
}
}
num[i_num++]=number;
i+=len;
}
}
for(int i=0;i<i_num;i++)
{
int min=0;
for(int j=0;j<i_num;j++)
{
if(num[j]<num[min])
{
min=j;
}
}
printf("%d",num[min]);
num[min]=100000000;
if(i!=i_num-1)
{
printf(" ");
}
}
printf("\n");
}
}