目录

自动去重和排序

目录

【题目描述】

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了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里面的每一个元素。

  1. begin(); // 返回指向第一个元素的迭代器

  2. end(); // 返回指向迭代器的最末尾处(即最后一个元素的下一个位置)

  3. clear(); // 清除所有元素

  4. count(); // 返回某个值元素的个数

  5. empty(); // 如果集合为空,返回true

  6. equal_range(); //返回集合中与给定值相等的上下限的两个迭代器

  7. erase()–删除集合中的元素

  8. find()–返回一个指向被查找到元素的迭代器

  9. get_allocator()–返回集合的分配器

  10. insert()–在集合中插入元素

  11. lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器

  12. key_comp()–返回一个用于元素间值比较的函数

  13. max_size()–返回集合能容纳的元素的最大限值

  14. rbegin()–返回指向集合中最后一个元素的反向迭代器

  15. rend()–返回指向集合中第一个元素的反向迭代器

  16. size()–集合中元素的数目

  17. swap()–交换两个集合变量

  18. upper_bound()–返回大于某个值元素的迭代器

  19. value_comp()–返回一个用于比较元素间的值的函数