杭电1106 http://acm.hdu.edu.cn/showproblem.php?pid=1106
题目大意:给定一串字符串,以字符串中的‘5’为分割,且去除前导0后按从小到大顺序输出。
题目思路:对于每个以5为分割的字符串数字大小,可以以b[i]*10 + (a[i] - '0')计算得到。即每进一位*10;
而对于分割的字符串,要分情况,第一种是遇到5,且前置一个字符不为5,这时b的计数下标要++,其次是遇到多个前导0,b下标只能+1次,若多个前导0出现在字符串中间,则归为前一种方案处理,若集中在最后,则需额外判断,即a[i]!='5'&&a[i+1]=='\0';注意是‘0’,此时下标才能++。
AC代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <stdlib.h>
//#define DEBUG
using namespace std;
char a[1005];
int b[1005];
int num;
bool f;
int main() {
while(cin>>a) {
int len=strlen(a);
num=0;
f=0;
memset(b,0, sizeof(b));
for(int i=0;i<len;i++) {
if(a[i]!='5') {
b[num]=b[num]*10+(a[i]-'0');
f=1;
}
else if(a[i]=='5'&&f) { //这个else if可以说是精髓所在。f用于判断
num++;
f=0;
}
if(a[i]!='5'&&a[i+1]=='\0') { //'\0'
num++;
}
}
sort(b,b+num);
for(int i=0;i<num-1;i++) {
cout<<b[i]<<" ";
}cout<<b[num-1]<<endl;
}
return 0;
}