明明的随机数

GitHub跳转原题关系图返回列表

用 set 去重后排序,输出不同随机数的个数和升序序列。

OJ: noi_openjudge

题目 ID: ch0110-09

难度:入门

标签:排序集合python

日期: 2026-07-30 23:01

题意

删除随机数中的重复值,再将剩余数字从小到大输出,并先输出不同数字的个数。

思路

set 会自动只保留每个整数的一份,sorted(set(...)) 再把无序集合转为升序列表。列表长度就是不同数字的个数。

代码

Python代码

python
input()
numbers = sorted(set(map(int, input().split())))

print(len(numbers))
print(*numbers)

C++代码

cpp
#include <cstdio>
int n;
int cnt = 0;
int a[1200] = {0};
int main(){
    int i,t;
    scanf("%d",&n);
    for (i=1;i<=n;i++){
        scanf("%d",&t);
        if( a[t] == 0){
            cnt++;
            a[t] = 1;
        }
    }

    printf("%d\n",cnt);
    for (i=1;i<=1000;i++){
        if( a[i] == 1)
            printf("%d ",i);
    }
    return 0;
}

复杂度

去重平均时间为 O(n)O(n),排序时间为 O(mlogm)O(m \log m),其中 mm 是不同数字的个数;空间复杂度为 O(m)O(m)

总结

只需要“去重后再排序”时,sorted(set(values)) 是清楚且常用的组合。