zufeoj 数值排序(简单题)

数值排序

时间限制: 1 Sec  内存限制: 128 MB
提交: 186  解决: 45
[提交][状态][讨论版]

题目描述

输入一串数字,把这串数字中的‘0’都看成空格,那么就得到一行用空格分割的若干非负整数(如果有三个或三个以上连续的‘0’,则第1个‘0’看成一个空格,第2个‘0’看成数值0,后面连续的0看成一个空格)。

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

输入

输入文件中包含多个测试数据。每个测试数据为一串数字(数字之间没有空格,最前面的数字不为0)。测试数据保证:分割后得到的每个非负整数不会大于10000000000;分割后最多有10000个非负整数;最后一个数字不可能是0。

测试数据一直到文件尾。

请用字符处理。

输出


对输入文件中的每个测试数据,输出一行,是分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开。

样例输入

4500051231232050775
111054300023980012980090000098765430001

样例输出

51231232 775 45 5 0
9876543 2398 1298 543 111 9 1 0 0 0

 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <algorithm>
 5 #include <queue>
 6 using namespace std;
 7 priority_queue<long long>q;
 8 int main()
 9 {
10     char a[505];
11     while(cin>>a)
12     {
13         int l=strlen(a);
14         long long k=0;
15         int u=0;
16         bool f=0;
17         for(int i=0;i<l;i++)
18         {
19            if(a[i]!='0')
20            {
21                k=k*10+a[i]-'0';
22                f=1;
23                u=0;
24            }
25            else if(a[i]=='0'&&f==1)
26            {
27                q.push (k);
28                k=0;
29                f=0;
30                u++;
31            }
32            else if(a[i]=='0'&&f==0&&u==2)
33            {
34                q.push (0);
35                u++;
36            }
37            else if(a[i]=='0')
38                u++;
39         }
40         q.push(k);
41         while(!q.empty())
42         {
43             cout<<q.top();
44             q.pop();
45             if(q.empty ()) cout<<endl;
46             else cout<<" ";
47         }
48     }
49     return 0;
50 }
原文地址:https://www.cnblogs.com/caiyishuai/p/13271151.html