VIRTUALS

the virtual labs for the virtuals

0%

HJ3. 明明的随机数

摘要:
简单的排序+去重。

题目

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

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

当没有新的输入时,说明输入结束。

输入描述:
注意:输入可能有多组数据(用于不同的调查)。每组数据都包括多行,第一行先输入随机整数的个数N,接下来的N行再输入相应个数的整数。具体格式请看下面的”示例”。

输出描述:
返回多行,处理后的结果

示例1

输入:
3
2
2
1
11
10
20
40
32
67
40
20
89
300
400
15
输出:
1
2
10
15
20
32
40
67
89
300
400
说明:
输入解释:
第一个数字是 $3$,也即这个小样例的 $N=3$,说明用计算机生成了 $3$ 个 $1$ 到 $1000$ 之间的随机整数,接下来每行一个随机数字,共 $3$ 行,也即这 $3$ 个随机数字为:

2
1
1
所以第一个小样例的输出为:
1
2
第二个小样例的第一个数字为 $11$,也即…(类似上面的解释)…
所以第二个小样例的输出为:
10
15
20
32
40
67
89
300
400
所以示例1包含了两个小样例!!

排序去重

本题考察排序去重,C++可以完全依赖STL,C++和Java都可以使用有序集合。
手动去重也是可以的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
* author: etoa
* 2021-08-14 19:57:36
*/
#include <bits/stdc++.h>

using namespace std;

int main()
{
int n;
for (; cin >> n; ) {
vector<int> a(n);
for (int i = 0; i < n; i ++) cin >> a[i];
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
for (auto &each : a) {
cout << each << endl;
}
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
* author: etoa
* 2021-08-14 20:22:27
*/
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
for (; in.hasNext();) {
int n = in.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
Arrays.sort(a);
List<Integer> list = new ArrayList<>();
// dedupe
for (int i = 0; i < n; i++) {
list.add(a[i]);
int j = i + 1;
for (; j < n && a[j] == a[i]; ++j);
i = j - 1;
}
for (Integer each : list) {
System.out.println(each);
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* author: etoa
* 2021-08-14 20:45:27
*/
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
for (; in.hasNext();) {
int n = in.nextInt();
Set<Integer> ordSet = new TreeSet<>();
for (int i = 0; i < n; i++) {
ordSet.add(in.nextInt());
}
for (Iterator iter = ordSet.iterator(); iter.hasNext();) {
System.out.println(iter.next());
}
}
}
}

原题链接: HJ3. 明明的随机数