P1316 明明的随机数

来源:互联网 发布:广州白云电气知乎 编辑:程序博客网 时间:2024/05/22 19:31


 描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

格式

输入格式

输入有2行,第1行为1个正整数,表示所生成的随机数的个数:
N
第2行有N个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

样例1

样例输入1[复制]

1020 40 32 67 40 20 89 300 400 15

样例输出1[复制]

815 20 32 40 67 89 300 400

用到两个泛型算法(包含在头文件<algorithm>中):p342.

1.sort:调用sort会重排输入序列的元素,使之有序,它是利用元素类型的<运算符来实现排序的,sort算法接受两个迭代器,表示要排序元素的范围。

2.unique:unique算法重排输入序列,将相邻的重复项“消除”,并返回一个不重复值范围末尾的迭代器。打引号是因为unique并不真的删除任何元素,它只是覆盖xiangl 的重复元素,使得不重复元素出现在序列开始部分,unique返回的迭代器指向最后一个不重复元素之后的位置。此位置之后的元素仍然存在,但我们不知道它们的值是什么。

由于算法不能执行容器的操作,我们将用vector的erase成员来完成真正的删除操作。


Note:标准库算法对迭代器而不是容器进行操作。因此,算法不能(直接)添加或删除元素。

#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){int n, val;vector<int> v;while (cin >> n){while (n--&&cin >> val){v.push_back(val);}sort(v.begin(), v.end());auto end_unique = unique(v.begin(), v.end());v.erase(end_unique, v.end());cout << v.size() << endl;for (auto c : v)cout << c << ' ';}return 0;}

0 0
原创粉丝点击