1050: 分割排序

题目描述

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

输入

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

输出

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

样例输入

0051231232050775

样例输出

0 77 12312320
 1 //1050: 分割排序
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 using namespace std;
 6 char str[1000];
 7 char temp[1000][1000];
 8 int main(){
 9     while(scanf("%s",str)!=EOF){
10         int len=strlen(str);
11         int k,i=0,flag=1;
12         for(k=0;k<1000;){
13             int x=0;flag=1;
14             while(str[i]!=‘5‘&& i<len){
15                 temp[k][x++]=str[i];
16                 i++;
17                 flag=0;
18             }
19             if(flag==0){
20                 k++;
21             }
22             i++;
23             if(i>=len){
24                 break;
25             }
26         }
27         int a[1000],d=0;
28         for(int j=0;j<k;j++){
29             sscanf(temp[j],"%d",&a[d++]);
30         }
31         sort(a,a+d);
32         for(int j=0;j<d;j++){
33             printf("%d ",a[j]);
34         }
35         memset(str,‘\0‘,sizeof(str));
36         memset(temp,‘\0‘,sizeof(temp));
37         printf("\n");
38     }
39     return 0;
40 } 

Mist Note:这道题做了蛮久的,bug调试了一段时间,感觉自己脑回路不行吧。利用字符5将字符串切割,将其存入二维数组中,然后再将字符串前面的0处理下,再将字符串转换成int类型。这里学到了一个比较好的方法:

sscanf(temp[j],"%d",&a[d++]);这行代码可以将第一个参数的字符数组,转换成数字插入到第三个参数数组中,注意第二个参数的格式,感觉用起来比较方便。解决字符串问题,还是要注意细节问题,不然调试bug会浪费大量的时间。

 

原文地址:https://www.cnblogs.com/mist2019/p/10335899.html

时间: 2024-10-08 10:37:54

1050: 分割排序的相关文章

Oracle 字符串分割排序冒泡算法

例子: 一个字符串"11,15,13,17,12",以逗号分割,现在要排序成"11,12,13,15,17". 写了一个实现方法,记录下来以备后用: -------------------------------------------------------- -- Export file for user BEN -- -- Created by Administrator on 2015/8/5 星期三, 10:24:20 -- ---------------

linq排序之 根据文本 A-001-002-003 这种类型进行分割排序 空值放于最后

调用 1 List<string> data = new List<string>() { 2 "D-001-001-001","A-001-004-001","A-001-002-001", 3 "A-002-001-001", "F-004-001-001", "A-003-001-001", 4 "A-004-001-004","

快速选择排序算法

快速排序是对冒泡法排序的一种改进. 1  排序思想: 通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小:再分别对这两部分记录进行下一趟分割排序,以达到整个序列有序,重复执行以上的划分操作,直 到所有要进行排序的数据变为有序为止. 可能仅根据基本思想对快速排序的认识并不深,接下来以对n个无序数列A[0], A[1]-, A[n-1]采用快速排序方法进行升序排列为例进行讲解. (1)定义两个变量low和high,将low.high分别设置为要进行排序的序

复习数据结构:排序算法(五)——快速排序的各种版本

之前已经比较熟悉快排的基本思想了,其实现的方式也有很多种.下面我们罗列一些常见的实现方式: 版本一:算法导论上的单向扫描,选取最后一个元素作为主元 #include<iostream> using namespace std; int partition(int data[], int low, int high) { int pivot = data[high]; // let the last atom be the pivot int i = low - 1; // mark the p

STL算法之排序算法

STL排序算法通常复杂度坏于线性,且必须要random-access Iterators. 所以,forward_list, list, associative and unordered contains 不提供随机访问迭代器,这些容器不能用排序算法. 但是,forward_list,list提供了成员函数sort,associative contains 自动排序,unordered contains不能排序. 通常,排序元素一次要比保持元素有序要更快.STL提供了不同的排序算法,根据需求选

Java基础知识二次学习--第五章 数组

第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 栈里面存的数组的引用 实际对象在堆内存里面 (C与C++是分配在栈里的) 内存图: 元素为引用数据类型的数组 引用类型的数组如上图 时间:2017年4月26日15:16:22~2017年4月26日15:19:00 章节:05章_02节  视频长度:05:25 内容:数组元素的创建与使用 心得: 首

14-01 Java matches类,Pattern类,matcher类

Pattern类 正则表达式常见规则 A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') B:字符类 [abc] a.b 或 c(简单类),其中一个 [^abc] 任何字符,除了 a.b 或 c(否定) [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) [0-9] 0到9的字符都包括 C:预定义字符类 . 任何字符.我的就是.字符本身,怎么表示呢? \. \d 数字:[0-9] \

【决战西二旗】|快速排序的优化

1.前言 前面的一篇文章https://www.cnblogs.com/backnullptr/p/11934841.html讲了快速排序的基本概念.核心思想.基础版本代码实现等,让我们对快速排序有了一个充分的认识,但还无法达到面试中对快速排序灵活应对的程度. 快速排序是图领奖得主发明的算法,被誉为20世纪最重要的十大算法之一,快速排序为了可以在多种数据集都有出色的表现,进行了非常多的优化,因此对我们来说要深入理解一种算法的最有效的手段就是不断优化提高性能. 通过本文你将了解到以下内容: 快速排

python sort和sorted

转自 https://www.jianshu.com/p/419a8732ac62 一.函数sort() sort() :仅对list对象进行排序,会改变list自身的顺序,没有返回值,即原地排序: list.sort(key=None, reverse=False) key :设置排序方法,或指定list中用于排序的元素: reverse :升降序排列,默认为升序排列: 一维元素组成的list排序:忽略参数key >>> a = ['TaoBao', 'Google', 'BaiDu'