HDOJ 1106 排序


题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1106


分析:
注意2点:
考虑最后一个是不是5,不是5要输出。
第一个是5要处理,比如55553
就输出3


代码写的很乱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
#include <cstdlib>
#include <iostream>
#include <algorithm>
 
using namespace std;
char arr[1001];
int result[1001];
int main()
{
    while(scanf("%s", arr) != EOF)
    {
         int cnt = 0;
         int tmp = 0;
         int flag = 0;  // 表示第一个是5 
         for(int i=0; i<strlen(arr); ++i)
         {
              if(arr[i] == '5')
              {
                    if(i == 0)
                       flag = 1;
                    int k = i+1;
                    while(arr[k] == '5')
                        k++;
                     i=k-1;
                     if(flag == 1)
                     {
                         flag= 0;
                         continue;
                     }
                     result[cnt++] = tmp;
                    tmp = 0;
                    continue;
              }
              tmp *= 10;
              tmp += arr[i]-'0';
              if(i == strlen(arr)-1)
              {
                   result[cnt++] = tmp;
               }
         }
         sort(result, result+cnt);
         for(int i=0; i<cnt; ++i)
            if(i == 0)
                printf("%d",result[i]);
            else
                printf(" %d", result[i]);
         printf("\n");        
          memset(arr, 0, sizeof(arr));
    }
 
}

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

发表评论

电子邮件地址不会被公开。 必填项已用*标注