HDU 1106 排序
2015-07-22 17:39
225 查看
排序
[align=left]Problem Description[/align]输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
[align=left]Input[/align]
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
[align=left]Output[/align]
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
[align=left]Sample Input[/align]
0051231232050775
[align=left]Sample Output[/align]
0 77 12312320
尽管是一道水题,也花了不少时间,说是分割下来的字符串不会大于100000000,也要注意像00000000100000000这种情况,数组的第二维开小了就错了!
代码:
#include<cstring> #include<cstdio> #include<algorithm> using namespace std; int main() { //freopen("in.txt","r",stdin); char sub[1005][25]; char s[1005]; int a[105]; int i,k,t; while(scanf("%s",s)!=EOF) { int len=strlen(s); s[len]='5'; s[len+1]='\0';//方便分割 for(i=0;i<len+1;i++) if(s[i]!='5')break; for(k=0,t=0;i<len+1;i++) { if(s[i]=='5') { if(s[i+1]=='5') continue;//重复的5跳过 else { sub[k][t]='\0'; t=0; k++; continue; } } sub[k][t++]=s[i]; } for(i=0;i<k;i++) a[i]=atoi(sub[i]);//将字符串转换成数字 sort(a,a+k); for(i=0;i<k;i++) if(i==k-1) printf("%d\n",a[i]); else printf("%d ",a[i]); } return 0; }
相关文章推荐
- php文件下载
- 九、Apache Solr实现竞价排名
- 大数据之简介
- Spring -- Bean自动装配&Bean之间关系&Bean的作用域
- 常见字符串函数
- spring事务管理
- flex 布局 自己做的demo
- osg 自动漫游
- 安卓关机重启
- Linux下OpenSSL 安装图文详解
- 【IOCP】 IOCP模型属于一种通讯模型- 较难
- Ubuntu下交叉编译zlib,libpng,freetype
- 为什么使用 Redis及其产品定位
- 深入C++之C++模板类别
- MySQL本地可以连接,远程连接不上的解决
- HDOJ 题目1520 Anniversary party(树形dp)
- 工作篇-电商项目需求总结下
- java 同步 Synchonized 锁 ReentrantLock 原理 源码
- 怎么样excel其产生的条形码(10分钟的时间excel)从而出现了条形码
- vs2015全新nuget使用全析