自动去重和排序
【题目描述】
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
【输入】
有2行。第1行为1个正整数N ,表示所生成的随机数的个数。第2行有N个用空格隔开的正整数,为所产生的随机数。
【输出】
共2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
For example:
Input
Result
10
20 40 32 67 40 20 89 300 400 15
8
15 20 32 40 67 89 300 400
分析
这题真的困扰了我好久妈了个逼的,一开始我用最基本的语法去写,结果我他妈直接写完报错,我以为是我的算法不够好,就发到唐老师群里求助,结果他说我上课不听课…我也想上他的课呀…
后来我去网上搜,有个人的博客里有这题,他用到了一个set,这个东西我不太清楚是啥,于是翻开我的c++primer去找,但是这本书实在是太专业了,我得把前面的看懂才能彻底搞懂这个东西,而且今天晚上我发现我要想搞懂这本书实在是太难了,我需要付出很多很多时间和精力。而我有更重要的任务去做,比如刷程序设计的题目,比如学习python,我真的不想再自己去碰一鼻子灰了,还是跟着导师的步子来吧。
所以今天晚上,我得明确我的学习线路:1.c++学习听老师的话,就以做题为主,不会的上百度搜,遇到一个点搞懂一个点就行了。2.python学习得跟上进度,提上日程。3.数学的学习也不能落下。4.在寝室里的时候就学学办公软件excel什么的。5.另外,多看看书,了解时局,和历史,最近对中国经济确实挺感兴趣。
答案
#include <iostream>
#include <bits/stdc++.h> //这玩意是万能头文件
using namespace std;
int main()
{
int n;
cin >> n;
int x;
set<int>s; //set可以自动进行排序,默认是从小到大
for(int i=0; i<n; i++)
{
cin >> x;
s.insert(x); //这个有点像python的.append
}
cout<<s.size()<<endl;
for(auto x:s)
cout << x <<' ';
return 0;
}
其它说明
for(auto i:v)
cout«i;
遍历v里面的每一个元素。
-
begin(); // 返回指向第一个元素的迭代器
-
end(); // 返回指向迭代器的最末尾处(即最后一个元素的下一个位置)
-
clear(); // 清除所有元素
-
count(); // 返回某个值元素的个数
-
empty(); // 如果集合为空,返回true
-
equal_range(); //返回集合中与给定值相等的上下限的两个迭代器
-
erase()–删除集合中的元素
-
find()–返回一个指向被查找到元素的迭代器
-
get_allocator()–返回集合的分配器
-
insert()–在集合中插入元素
-
lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器
-
key_comp()–返回一个用于元素间值比较的函数
-
max_size()–返回集合能容纳的元素的最大限值
-
rbegin()–返回指向集合中最后一个元素的反向迭代器
-
rend()–返回指向集合中第一个元素的反向迭代器
-
size()–集合中元素的数目
-
swap()–交换两个集合变量
-
upper_bound()–返回大于某个值元素的迭代器
-
value_comp()–返回一个用于比较元素间的值的函数