题目描述
明明想在学校中请一些同学一起做一项问卷调查。
为了实验的客观性,他先用计算机生成了 N个 1到 1000之间的随机整数,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。
输入格式
输入文件包含 2行,第 1行为 1个正整数,表示所生成的随机数的个数N。
第 2行有 N个用空格隔开的正整数,为所产生的随机数。
输出格式
输出文件也是 2行,第 1行为 1个正整数 M,表示不相同的随机数的个数。
第 2行为 M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
输入样例
10
20 40 32 67 40 20 89 300 400 15
输出样例
8
方法1
桶排序
C++ 代码
#include <iostream>
using namespace std;
const int N = 1010;
int a[N], q[N];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
int cnt = 0;
for (int i = 0; i < n; i ++ ) {
if (!q[a[i]]) {
cnt ++ ;
q[a[i]] ++ ;
}
}
cout << cnt << endl;
for (int i = 1; i <= 1000; i ++ ) {
if (q[i]) cout << i << ' ';
}
return 0;
}
方法2
用set容器
运行速度比桶排序要快,写起来也方便
C++ 代码
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> a;
int n;
cin >> n;
while (n -- ) {
int x;
cin >> x;
a.insert(x);
}
cout << a.size() << endl;
for (auto s : a) cout << s << ' ';
}
感兴趣的话点个赞或关注我~