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代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <vector>
 4 #include <algorithm>
 5 #include <functional>
 6
 7 char szSeq[1010];
 8 int iHead, iTail;
 9 std::vector<int> vecNums;
10
11 void Init()
12 {
13     vecNums.clear();
14     iHead = 0;
15     iTail = strlen(szSeq);
16 }
17
18 int GetNumber()
19 {
20     char szNum[1010] = { 0 }; // 虽然数字大小不会超过100000000,但是如果很多的0呢,数组开小了,会越界。
21     int iCount = 0, iNum = -1;
22     int flag = false;          // false:未获取到数字;true:获取到数字
23     while (iHead < iTail && ‘5‘ == szSeq[iHead]) ++iHead; // 处理数字前面的‘5‘
24     while (iHead < iTail && ‘5‘ != szSeq[iHead])          // 获取数字
25     {
26         flag = true;
27         szNum[iCount++] = szSeq[iHead++];
28     }
29     if (true == flag)
30         sscanf(szNum, "%d", &iNum);  //把字符转换成数字
31     return iNum;
32 }
33
34 void OutPutVec()
35 {
36     for (std::vector<int>::iterator iter = vecNums.begin(); iter != vecNums.end(); ++iter)
37     {
38         if (iter == vecNums.begin())
39             printf("%d", *iter);
40         else
41             printf(" %d", *iter);
42     }
43     printf("\n");
44 }
45
46 int main(void)
47 {
48     int iNum;
49     while (EOF != scanf("%s", szSeq))
50     {
51         Init();
52
53         //从数字序列中获取所有的数字放入vecNums容器中
54         while (-1 != (iNum = GetNumber()))
55             vecNums.push_back(iNum);
56
57         std::sort(vecNums.begin(), vecNums.end(), std::less<int>());
58
59         OutPutVec();
60     }
61     return 0;
62 }
时间: 2024-08-03 03:11:47

hdu 1106 排序(水题)的相关文章

hdu 5427(排序水题)

排序 年轻的排前面 名字中可能有空格 Sample Input21FancyCoder 19962FancyCoder 1996xyz111 1997 Sample OutputFancyCoderxyz111FancyCoder 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <algorithm> 5 # include <string>

HDU 1862 EXCEL排序 (排序水题)

Problem Description Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. Input 测试输入包含若干测试用例.每个测试用例的第1行包含两个整数 N (<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号.以下有 N 行,每行包含一条学生纪录.每条学生纪录由学号(6位数字,同组测试中没有重复的学号).姓名(不超过8位且不包含空格的字符串).成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开.当读到 N=0 时,全部输入结

CodeForces 22D Segments 排序水题

题目链接:点击打开链接 右端点升序,取右端点 暴力删边 #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <iostream> #include <map> #include <set> #include <math.h> using namespace std; #define inf 10

HDU 2092 整数解 --- 水题

x+y = n, x*y = m; y = n - x; x * ( n - x) = m nx - x^2 = m; x^2 - nx + m = 0; △ = sqrt(n^2 - 4m) 要有整数解即△需要为可开方数即可. /* HDU 2092 整数解 --- 水题 */ #include <cstdio> #include <cmath> int main() { double n, m; while (scanf("%lf%lf", &n,

HDU 1106 排序 其实是字符串分割

Problem Description 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整数就是由若干个'0'组成的,这时这个整数就是0). 你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出. Input 输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000. 输入数据保证:分割得到的非负整数不会大于100000000:输入数据不可能

Poj 1094 拓扑排序 水题

Sad..这么水的题WA了无数发,题目要看仔细啊,留下来做个警告把 #include <cstdio> #include <cstring> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib> #include <list> #i

Girls&#39; research HDU - 3294(马拉车水题)

题意: 求最长回文串 长度要大于等于2  且输出起点和终点  输出回文串字符 这个字符还是要以给出的字符为起点a 输出 解析: 分析一下s_new串就好了 #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector> #include &l

Hdu 1106 排序 (atoi函数与 strtok函数的应用

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1106 好久都没刷题了,今天突然特别怀念以前刷题的日子,所以就找了几道水题来做做~~呵呵 在写这篇博客之前呢,已经很明了自己已经大三了,时光匆忙,在还没来得及转过头来,就已经过了两年了大学,原来走了这么远了~~感觉再怎么样,大三还是不敢偷懒~~不过有时候还真是挺迷茫的说实话,在这里呢,真心希望能得到你们各位的建议,只要是对我未来就业有好处的,我都会虚心取纳,(BTW:我是学嵌入式方向的)万分感谢~~~

hdu 5210 delete 水题

Delete Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5210 Description wld有n个数(a1,a2,...,an),他希望进行k次删除一个数的操作,使得最后剩下的n−k个数中有最多的不同的数,保证1≤n≤100,0≤k<n,1≤ai≤n(对于任意1≤i≤n) Input 多组数据(最多100组)对于每组数据:第一行:一个数n表示数的个数接下来一行:

HDU 1106 排序 字符串模拟

Problem Description 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整数就是由若干个'0'组成的,这时这个整数就是0). 你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出. Input 输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000. 输入数据保证:分割得到的非负整数不会大于100000000:输入数据不可能