题目信息
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。
注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。
当没有新的输入时,说明输入结束。
输入描述
注意:输入可能有多组数据(用于不同的调查)。每组数据都包括多行,第一行先输入随机整数的个数N,接下来的N行再输入相应个数的整数。具体格式请看下面的"示例"。
输出描述
返回多行,处理后的结果
示例输入
3
2
2
1
示例输出
1
2
题解
根据题目信息,可以得到以下信息
- 数据为随机整数
- 数据个数小于等于1000
- 数据须要去重
- 数据须要排序
操作方式两种情况:
1、用数组接收数据,放set去重,再用数组排序,输出
2、定义boolean型数组,对应位置设置true,最终返回为true的位置即可
方法2 思路比较新奇,是看网上的解题思路看到的,确实很实用,它提供了另一种去重、排序的新式实现方案
编码
int数组方式处理
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class MingRandomNumbers {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = br.readLine()) != null) {
int intNum = Integer.parseInt(input);
// 定义list接收数据
List<Integer> list = new ArrayList<>();
for (int i=0; i<intNum; i++) {
int forNum = Integer.parseInt(br.readLine());
list.add(forNum);
}
// 使用set去重
Set<Integer> set = new HashSet<>();
set.addAll(list);
// 再用list进行排序处理
list = new ArrayList<>();
list.addAll(set);
list.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
// 输出
StringBuilder sb = new StringBuilder();
for (int i=0; i<list.size(); i++) {
sb.append(list.get(i)).append('\n');
}
System.out.println(sb.substring(0, sb.length()-1));
}
}
}
boolean数组处理
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class MingRandomNumbers {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = br.readLine()) != null) {
int intNum = Integer.parseInt(input);
// 定义boolean型数组,数组默认大小为1001,数组默认值为false
boolean[] flags = new boolean[1001];
// 循环接收输入,对给到的输入位置置true
for (int i=0; i<intNum; i++) {
flags[Integer.parseInt(br.readLine())] = true;
}
StringBuilder sb = new StringBuilder();
for (int i=0; i<flags.length; i++) {
if (flags[i]) sb.append(i).append('\n');
}
System.out.println(sb.substring(0, sb.length()-1));
}
}
}