hdu 1106 排序 (字符串 排序)

题意:http://acm.hdu.edu.cn/showproblem.php?pid=1106

思路:虽然题目很水但是细节有点坑

        输入一个字符串 标记起始下标和结束下标

        从左向右枚举

        当碰到‘5’ 或者到达结束下标又不是‘5’时

        向左把当前表示的数求出

        其中要注意

        1。当起始位有多个‘5’ 时 要将起始下标向右移  while(a[begin]=='5') begin++;

        2。由于add() 中  now=begin-1; 所以 在结束下标不是‘5’时 add(begin+1);       

 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char a[1000+10];
int num[1000+10];
int cnt;
int add(int begin)
{
    int sum=0;
    int now=begin-1;
    int wei=1;
    while(now>=0&&a[now]!='5')
     {
                   sum+=wei*(a[now]-'0');
                   wei*=10;
                   now--;
               }
               num[cnt++]=sum;
}
int main()
{
    while(scanf("%s",a)!=EOF)
    {
        memset(num,0,sizeof(num));
        int i,j,k;
        int begin=0;
        int end=strlen(a)-1;
        while(a[begin]=='5') begin++;
        int now;
        cnt=0;

        while(begin<=end)
        {
            if(a[begin]=='5')
            {
               add(begin);
               while(a[begin]=='5') begin++;
            }
            else if(begin==end&&a[begin]!='5')
            {
                add(begin+1);
            }
            begin++;
        }
        sort(num,num+cnt);
        for(i=0;i<cnt;i++)
        {
            printf("%d",num[i]);
            printf("%c",i==cnt-1?'\n':' ');
        }

    }
    return 0;
}

 

posted @ 2014-09-25 21:13  sola94  阅读(166)  评论(0编辑  收藏  举报