0
点赞
收藏
分享

微信扫一扫

103 分割数字并排序

夏沐沐 2022-03-17 阅读 40

问题描述 :

输入一行数字,如果我们把这行数字中的‘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

c++:

#include <bits/stdc++.h>
using namespace std;

int main()
{	
	    int n;
		cin>>n;
		while(n--){
		char str[1000];
		cin>>str;
		char temp[1000]={'0'};
		int num[1000]={0};
		int index=0;
		int k=0;
		for(int i=0;i<strlen(str);i++){
			if(str[i]!='5'){
				temp[index]=str[i];
				index++;
			}else{
				if(str[i-1]!='5'){
					int x=0;
				for(int j=0;j<index;j++){
					x=x*10+(temp[j]-'0');
				}
				num[k]=x;
				k++;
				index=0;
				}
				
			}
		}
		if(index!=0){
			int x=0;
			for(int j=0;j<index;j++){
					x=x*10+(temp[j]-'0');
				}
				num[k]=x;
				k++;
		}
		sort(num,num+k);
		for(int i=0;i<k;i++){
			if(i==k-1){
				printf("%d\n",num[i]);	
			}else{
				printf("%d ",num[i]);
			}
		}
		
	}	

		
	return 0;
}



举报

相关推荐

0 条评论