题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1106
先上代码
int main()
{
int a[1000],i,j;
char s[1000];
while(cin>>s)
{
memset(a,0,sizeof(a));
for(j=0,i=0;i<strlen(s);i++)
{
if(s[i]!='5')a[j]=a[j]*10+s[i]-'0';
else if(s[i]=='5'&&s[i+1]!='5')j++;
}
sort(a,a+j+1);
if(s[strlen(s)-1]=='5'&&s[0]!='5')i=1;
else if(s[0]=='5'&&s[strlen(s)-1]!='5')i=1;
else if(s[0]=='5'&&s[strlen(s)-1]=='5')i=2;
else i=0;
for(;i<j;i++)
cout<<a[i]<<" ";
cout<<a[j]<<endl;
}
return 0;
}
解决这道题目的关键是两部分,算法实现,输出控制
算法实现:用一个数组来存放被空格“5”分开的数字,由于输入时字符型的,转换为整形s[i]-'0',存放的时候将已有的数字乘以10加上 当前的,注意两个“5”连续的情况,
else if(s[i]=='5'&&s[i+1]!='5')j++;
然后调用sort()函数排序;
输出控制:由于数组设计问题,设计的是遇到“5”然后j++,当第一个字符是‘5’时,数组a[0]就被赋值为0,最后一个字符为‘5’时,数组a[j]也会被赋值为0,这样排序后的结果就多了0,所以 用下面的代码控制输出
if(s[strlen(s)-1]=='5'&&s[0]!='5')i=1;
else if(s[0]=='5'&&s[strlen(s)-1]!='5')i=1;
else if(s[0]=='5'&&s[strlen(s)-1]=='5')i=2;
else i=0;
水水更健康~~