题目描述:
本题目要求读入n个整数(输入数字个数根据输入时随机确定,以输入一个非数字的值作为输入结束标志),利用STL比较数据大小并排序(由小到大升序),然后输出排序后的数据。
输入格式:
输入在一行中依次输入整数值,每个数字之间用空格分隔,输入数字个数根据输入时随机确定,以输入一个非数字的值作为输入结束标志。
输出格式:
先输出一段提示“从标准设备读入数据,直到输入是非整型数据为止”,在输入一组数字后,输出排序后的数字,在一行中由小到大依次输出所有值,数字之间用空格分隔。
输入样例:
10 3 -2 8 20 -9 e
输出样例:
从标准设备读入数据,直到输入是非整型数据为止
-9 -2 3 8 10 20
思路描述:
本题已经要求用STL来进行排序,那么STL中可以排序的有很多,集合,队列,但这里考虑到重复数字不会被删除,那我们肯定用队列进行解决,队列用有个优先队列,priority_queue,关于其排列顺序有两种,如下所示:
priority_queue<int, vector<int>, greater<int> > s;//小顶堆,1 2 3 4 5"
priority_queue<int> s;//大顶堆,"5 4 3 2 1"
我们按照题目要求,因此用大顶堆,直接读入数据,在输出行了。
代码如下:
#include <bits/stdc++.h>
using namespace std;
priority_queue<int,vector<int>,greater<int> > p;
int main(){
long long num;
while(cin >> num){
p.push(num);
}
cout <<"从标准设备读入数据,直到输入是非整型数据为止" << endl;
while(p.size()!=0){
cout << " " <<p.top();
p.pop();
}
return 0;
}