题目链接

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

解题思路

代码里
唯一注意的一点是多组数据

AC代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e3+10;
char str[N];
int ans[N];
int main(){
    while(cin>>str+1){
        int num=0;
        int len=strlen(str+1);
        int t=1,p=len;
        while(str[t]=='5'&&t<=len) t++;//把字符串首的5全部删除
        while(str[p]=='5'&&p>=1) p--;//把字符串尾的5全部删除
        for(int i=t;i<=p;i++){//从新字符串的首开始循环到尾
            if(str[i]!='5') ans[num]=ans[num]*10+(str[i]-'0');//因为要排序,需要把得到的一串字符转换成数,乘10是为了腾个位置给新扫描到的个位。
            else {int j=i;while(str[j]=='5' && j<=p) ++j;++num;i=j-1;}//如果当前是5,就把连着的几个5全部删除,让下一次i控制的循环从不是5的位置开始循环并赋值。
        }
        num++;
        sort(ans,ans+num);
        for(int i=0;i<num-1;i++) cout<<ans[i]<<' ';
        cout<<ans[num-1]<<endl;//实现每一行结尾无空格
        memset(str+1,0,sizeof str+1);//为下一组数据初始化
        memset(ans,0,sizeof ans);//同上
    }
}

总结

想了近两个小时没明白自己拿错了,看了一眼题解就发现自己没多组输入。自己眼瞎,加上样例就给了一组,想当然了。