hdu 1106 排序(水题)
题目描述:
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
输入:
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
例如:0051231232050775
输出:
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
例如:0 77 12312320
解题思路:
题目不难,注意细节。之前坑在了中间有一堆5的测试数据上。
字符串转成整数的方法:sscanf函数(string.h头文件中)、atoi函数(stdlib.h头文件中)
给出几个测试数据:
(1)开头带一个5:5123
(2)开头带许多5:55555123
(3)结尾带一个5:1235
(4)结尾带许多5:12355555
(5)中间带许多5:12355555456
(6)全零序列:000000000000000000000000000000000000000
(7)没有5:123
AC代码:
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
#include <functional> char szSeq[];
int iHead, iTail;
std::vector<int> vecNums; void Init()
{
vecNums.clear();
iHead = ;
iTail = strlen(szSeq);
} int GetNumber()
{
char szNum[] = { }; // 虽然数字大小不会超过100000000,但是如果很多的0呢,数组开小了,会越界。
int iCount = , iNum = -;
int flag = false; // false:未获取到数字;true:获取到数字
while (iHead < iTail && '' == szSeq[iHead]) ++iHead; // 处理数字前面的'5'
while (iHead < iTail && '' != szSeq[iHead]) // 获取数字
{
flag = true;
szNum[iCount++] = szSeq[iHead++];
}
if (true == flag)
sscanf(szNum, "%d", &iNum); //把字符转换成数字
return iNum;
} void OutPutVec()
{
for (std::vector<int>::iterator iter = vecNums.begin(); iter != vecNums.end(); ++iter)
{
if (iter == vecNums.begin())
printf("%d", *iter);
else
printf(" %d", *iter);
}
printf("\n");
} int main(void)
{
int iNum;
while (EOF != scanf("%s", szSeq))
{
Init(); //从数字序列中获取所有的数字放入vecNums容器中
while (- != (iNum = GetNumber()))
vecNums.push_back(iNum); std::sort(vecNums.begin(), vecNums.end(), std::less<int>()); OutPutVec();
}
return ;
}
hdu 1106 排序(水题)的更多相关文章
- hdu 5427(排序水题)
排序 年轻的排前面 名字中可能有空格 Sample Input21FancyCoder 19962FancyCoder 1996xyz111 1997 Sample OutputFancyCoderx ...
- hdu 1106:排序(水题,字符串处理 + 排序)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- HDU排序水题
1040水题; These days, I am thinking about a question, how can I get a problem as easy as A+B? It is fa ...
- hdu 5210 delete 水题
Delete Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5210 D ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 1106 排序 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1106 这个题目一开始以为是水题,就想着用来轻松轻松,谁知道改得我想吐!! 除了discuss 中的数据 ...
- PAT甲题题解-1012. The Best Rank (25)-排序水题
排序,水题因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E那么按这个优先级顺序进行排序每次排序前先求当前课程的排名然后再与目前最好的排名比较.更新 至于查询 ...
- PAT甲题题解-1062. Talent and Virtue (25)-排序水题
水题,分组排序即可. #include <iostream> #include <cstdio> #include <algorithm> #include < ...
- hdu 1251 (Trie水题)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
随机推荐
- HBase Shell操作
Hbase 是一个分布式的.面向列的开源数据库,其实现是建立在google 的bigTable 理论之上,并基于hadoop HDFS文件系统. Hbase不同于一般的关系型数据库(RDBMS ...
- mapreduce核心原理
1:第一阶段: 第一阶段的task每一个nodemanager并发运行程序,完全并发,各不影响.这就是map阶段 运行的task时maptask 2:第二个阶段的task并发实例互不相干,但是他们的数 ...
- openwrt编译环境搭建
1,首先安装ubuntu系统,这里安装的是虚拟机 2,安装openwrt编译所需环境 apt-get install build-essential libncures5-dev gawk libs ...
- MySQL的数值类型,时间
数值类型 整数型 tinyint smallint mediumint int|integer bigint 注意: 1, 如何选择数据类型,我们的原则是:够用就行!尽量的选择占用内存小的整型 ...
- windows下sass安装 以及一些要注意的问题
都说sass 环境难配其时也没那么难 按照以下步骤一下一下来还是挺快的 如果你是喜欢less 那就当我没说 233333 1.sass 是基于ruby这门语言的需要使用 rubygem这个包管理器安装 ...
- JAVA获取客户端IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- excel 怎么去掉单元格中第一个空格或其他特定符号/Excel excel中批量去掉表格中首字母前的空格或特定符号
=IF(FIND(" ",A160)>1,A160,MID(A160,FIND(" ",A160)+1,LEN(A160)-FIND(" &qu ...
- 仿google art图片预览算法及demo(iphone/安卓版本)
演示地址:用手机扫描二维码(手机端浏览) 功能:双击放大,单指操作拖动,双指操作放大缩小.
- 通过sqoop来传输mysql/oracle/vertica数据至HBASE
首先要注意将连接用的jar包,放到sqoop目录下,我的是/var/lib/sqoop 如果没有主键,则要加上-m 1 export正确的jdk目录 当做key的列必须唯一存在,不然报错 --mysq ...
- 关于搭建一个高性能网站的服务器的架设思路以及nginx测试的并发
对于高性能网站的架设,主要就是请求量大,那我们该如何进行支撑? 考虑到下面的几个方面: 1.要减少请求,那对于开发人员来说,网站的css文件进行合并,背景图片也要合并,一般都是请求一张比较大的图片,然 ...