每日一题C++版(有序去重)

编程是很多偏计算机、人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用。因此小白决定开辟一个新的板块“每日一题”,通过每天一道编程题目来强化和锻炼自己的编程能力(最起码不会忘记编程)

特别说明:编程题来自“牛客网”和“领扣”以及热心小伙伴的题目。由于小白有时想锻炼某一类编程方法,所以提供的代码不一定是最优解,但是本文提供的编程代码均为通过测试代码。

有序去重

题目描述:

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

InputParam:      n            输入随机数的个数

inputArray     n个随机整数组成的数组

Return Value

OutputArray        输出处理后的随机整数

注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

输入描述

输入多行,先输入随机整数的个数,再输入相应个数的整数

输出描述

返回多行,处理后的结果

示例

输入:

11

10

20

40

32

67

40

20

89

300

400

15

输出:

10

15

20

32

40

67

89

300

400

解析

这道题首先要求无重复,之后是排序,因此可以利用C++语言中的set关联容器是最方便的,因此第一种实现方式就是采用set关联容器。

第二种方式也是常用的方法,因为是要有序和唯一的,因此我们可以利用数组来实现,将生成的数看做数组的下角标,如果存在这个数就将数组中的这个元素置1,这样无论有多少个重复的数,该元素都是1,因此实现去重。

本题首先有一个比较隐晦的陷阱,在做题的时候自己的测试数据总可以过去,但是总是无法通过测试,关键就在于题目中的“同一个测试用例里可能会有多组数据,希望大家能正确处理”,在一个测试中就有多组数据,也就是我们在定义存数据的容器的时候需要考虑到再次测试的时候这个容器里面的数据需要清除。因此对于容器的定义需要放在循环while的里面。

代码

方法一

#include <iostream>
#include <set>
using namespace std;
int main()
{
 int num=0;
 int value;
   while(cin>>num)
   {
       set<int> orgroup;
       for (int i = 0; i<num; i++)
       {
           cin >> value;
           orgroup.insert(value);
       }
       for (auto m=orgroup.begin();m!=orgroup.end();m++)
       {
           cout << *m << endl;
       }
   }
 return 0;
}

方法二

#include <iostream>
using namespace std;
int main()
{
   int loop;
   while(cin>>loop)
   {
       int num[1001]={0};
       for(int i=0;i<loop;i++)
       {
           int j;
           cin>>j;
           num[j]=1;
       }
       for(int i=0;i<=1001;i++)
       {
           if(num[i]==1)
           {
               cout<<i<<endl;
           }
       }
   }
   return 0;
}

运行结果

(0)

相关推荐

  • 【学员专栏019期】详解常见4种排序-周子逸

    作者:周子逸 ID:初雪_Matt 学校:长沙市芙蓉区育才小学, 四年级 博客地址:https://www.luogu.com.cn/blog/magic-matt/pai-xu-suan-fa-ji ...

  • 剑指offer之找出数组中重复数字

    剑指offer之找出数组中重复数字

  • 算法创作|至少是其他数字两倍的最大数

    一道脑筋急转弯问题描述在一个给定的数组nums中,总是存在一个最大元素 .查找数组中的最大元素是否至少是数组中每个其他数字的两倍.如果是,则返回最大元素的索引,否则返回 -1来源:力扣(LeetCod ...

  • 1005 继续(3n 1)猜想 (25point(s))

    卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ...

  • 2020.11.14-pta天梯练习赛补题

    7-7 矩阵A乘以B 给定两个矩阵A和B,要求你计算它们的乘积矩阵AB.需要注意的是,只有规模匹配的矩阵才可以相乘.即若A有R​a​​行.C​a​​列,B有R​b​​行.C​b​​列,则只有C​a​​ ...

  • Python|如何判断丑数

    问题描述编写一个程序判断给定的整数是否为丑数.丑数就是只包含质因数 2,3, 5 的正整数.说明:(1)1是丑数.(2)输入不会超过 32 位有符号整数的范围: [-2³¹,  2³¹-1].解决方案 ...

  • 每日一题C++版(有序提取不重复数字)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 【黑客数学·每日一题】暑假期间“每日一题”汇总版

    各位黑客伙伴们: 大家好!随着暑期的结束,我们迎来了崭新的学期,"每日一题"的发布时间也正式恢复为常规的每周一到周五的下午(一周五期). 有部分黑客伙伴们在暑假安排了各种各样精彩活 ...

  • 每日一题 C++版(走迷宫)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 C++版(汽水瓶)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 C++版(简单密码)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 C++版(分类有效的IP地址和掩码)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 C++版(坐标移动)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题C++版(组成最大的数)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题C++版(电话号码分身)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...