zoukankan      html  css  js  c++  java
  • 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("
    ");
    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 }
  • 相关阅读:
    html基础起航
    必杀技———SQL基础整理系列(一)
    JavaScript代码段整理笔记系列(一)
    与JSP的初次邂逅……
    产品第二篇
    产品第一篇
    进程在后台可靠运行的几种方法
    Vue.js模板语法
    更靠谱的横竖屏检测方法
    浮动【电梯】或【回到顶部】小插件:iElevator.js
  • 原文地址:https://www.cnblogs.com/yongqiang/p/6260544.html
Copyright © 2011-2022 走看看