hdu 1106 排序(水题)

Posted Linux C/C++程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于hdu 1106 排序(水题)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1106 排序 (排序+处理字符串)

HDU 1106 排序

(HDU)1106 -- 排序

Hdu 1106 排序

HDU 1106 排序

HDU 1040 As Easy As A+B (排序。。。水题)