题目链接
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);//同上 } }
总结
想了近两个小时没明白自己拿错了,看了一眼题解就发现自己没多组输入。自己眼瞎,加上样例就给了一组,想当然了。