排序Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 73276 Accepted Submission(s): 22492 http://acm.hdu.edu.cn/showproblem.php?pid=1106 Problem Description 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
Input 输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
Output 对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input 0051231232050775
Sample Output 0 77 12312320
|
没错,这是一道水题。。。只要倒序看就OK啊~~
但是,也WR了一次,因为没考虑5开头的情况,用倒序做容易忽略。
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
char s[1005];
int a[1005];
while(scanf("%s",s)!=EOF)
{
int n=strlen(s);
memset(a,0,sizeof(a));
int k=0,h=1;
for(int i=n-1;i>=0;i--)
{
if(s[i]!='5')
{
a[k]+=(s[i]-'0')*h;
h*=10;
//cout<<s[i]-'0'<<" "<<"a["<<k<<"]="<<a[k]<<endl;
}
else
{
if(h>1)
{
k++;
h=1;
}
}
}
if(s[0]=='5')
k--;
sort(a,a+k+1);
for(int i=0;i<k;i++)
{
cout<<a[i]<<" ";
}
cout<<a[k]<<endl;
memset(s,0,sizeof(s));
}
return 0;
}