C++编程之明明的随机数

问题

明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
数据范围: 1≤N≤1000 ,输入的数字大小满足 :1≤val≤500
第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数,输出多行,表示输入数据处理后的结果。
例如:
在这里插入图片描述

知识点

知识点:数组

问题分析

生成了N个1到500之间的随机整数,我们需要去除其中重复的数字并从小到大排序,我们的第一想法就是:好家伙,这不是完美符合set容器吗?set容器内数值唯一且默认从小到大。(代码1)
在这里插入图片描述
此外,在搞定之后看讨论区,发现一个老哥的代码也很有趣,属于用数组完美卡住了题目要求,其思想是用一个全为0的数组作为标记,以该数组取反为进入循环条件,每出现一次随机数,以随机数作为数组下标将该个数组值改为1,这样下标即为随机数的值,完美搞定排序且数值唯一。学习后一并记录在下。(代码2)

代码1

#include <iostream>
#include <set>
using namespace std;

int main() {
    int n,N;
    cin>>N;
    set<int> setN;
    while(N--)
    {
        cin>>n;
        setN.insert(n);
    }
    for(auto &it:setN)
    {
        cout<<it<<endl;
    }
    return 0;
}

代码2

#include <iostream>
#include <set>
using namespace std;

int main() {
    int n,N;
    cin>>N;
    int A[1001]={0};
    while(N--){
        cin>>n;
        if(!A[n]){
             A[n]=1;
        }
    }
    for(int i=0;i<1001;i++){
        if(A[i]){
            cout<<i<<endl;
        }
    }
}

结果

代码1

运行时间占用内存
3ms284KB

代码2

运行时间占用内存
4ms460KB
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值