因为最近时间关系,加上看错了题目,下面的代码就只能一组输入。
先定义char 类型数组p[1000]来储存数字,int数组b[1000]存储字符转化为整形的十进制数,i代表p的字符位置,j代表b的整形位置,以n来计p的长度。
首先先判断开头数字是否连续或只有一个为0,则b[0]=0,j+1,若开头数字连续为5或者有一个为5,则i跳到不是5的那个位置。走一个for循环p[i]不是5,则吧连续不是5的数变成整形数存储在b[i]中,如果b[i]>100000000则j+1,然后再存储。如果遇到5,则就j+1,然后再回到上面循环中;如果期间出现连续的5则i+1。
已经所以数存储在b数组中,然后在比较数组中每一个的大小,以从小到大的排序分别存储下b[0],b[1],b[2]…
最后在每两个整数间加一个空格,然后输出b数组‘。
#include"stdafx.h"
#include<iostream>
using namespace std;
#include<stdio.h>
int main()
{
char p[1000]={'0'};
int b[1000]={0};
int i=0, j=0,n=-1;
while((p[++n]=getchar())!='\n')
{
}
p[n]='\0';
for(i=0;p[i]==0&&i<n;i++)
{
b[0]='0';
if(i==0)
{
j+=1;
}
}
if(i==0)
for(;p[i]=='5';i++)
{
}
for(;i<n;i++)
{
if(p[i]!='5')
{
b[j]=b[j]*10+p[i]-'0';
if(b[j]>100000000)
{
j++;
}
}
else
for(;i<n;)
{
if(p[i+1]=='5')
{
i++;
}
else
{
if(i+1!=n)
j++;
break;
}
}
}
int swap;
for(int i=0;i<=j;i++)
{
for(int t=i+1;t<=j;t++)
{
if(b[i]>b[t])
{
swap=b[i];
b[i]=b[t];
b[t]=swap;
}
}
}
for(int i=0;i<=j;i++)
{
if(i!=j)
cout<<b[i]<<" ";
else
{
cout<<b[i];
}
}
cout<<endl;
}