您的位置:首页 > 其它

排序(1106)

2015-08-03 11:25 323 查看
*输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。

 

Input

输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。

 

Output

对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。

 

Sample Input

0051231232050775

 

Sample Output

0 77 12312320
方法一:直接处理
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <stack>
#include <set>
#include <map>
#include <string>
using namespace std;
#define pi acos(-1,0)
#define INF 2147483647
int max(int a,int b)
{
return a>=b?a:b;
}
int main()
{
char s[1050];
int ss[1050];
int i,j,l,sum,c;
while(scanf("%s",s)!=EOF)
{
l=strlen(s);
sum=0;
c=0;
memset(ss,0,sizeof(ss));
for(i=0;i<l;i++)
{
if(s[i]=='5')
{
if(s[i-1]!='5' && i!=0)	   //第一个是5会多加0,要加判断,还有前一个是5也会
ss[c++]=sum;

sum=0;
}
else
sum=sum*10+s[i]-'0';
}
if(s[l-1]!='5')            //最后一个不是5 就要加入
ss[c++]=sum;
sort(ss,ss+c);
for(i=0;i<c;i++)
{
if(i==0)
printf("%d",ss[i]);
else
printf(" %d",ss[i]);

}
printf("\n");
}

return 0;
}

方法二:strtok,atoi
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <stack>
#include <set>
#include <map>
#include <string>
using namespace std;
#define pi acos(-1,0)
#define INF 2147483647
int max(int a,int b)
{
return a>=b?a:b;
}
int main()
{
int n,i,c;
int b[1050];
char a[1050],*p;
while(scanf("%s",a)!=EOF)
{
c=0;
p=strtok(a,"5");
while(p!=NULL)
{
b[c++]=atoi(p);
p=strtok(NULL,"5");
}
sort(b,b+c);

printf("%d",b[0]);
for(i=1;i<c;i++)
printf(" %d",b[i]);
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c