问题描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
输入有2行,第1行为1个正整数,表示所生成的随机数的个数:
N
第2行有N个用空格隔开的正整数,为所产生的随机数。
输出格式
输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
样例输入
10
20 40 32 67 40 20 89 300 400 15
样例输出
8
15 20 32 40 67 89 300 400
AC代码:
import java.io.*;
import java.util.*;
/* acm.xatu.edu 明明的随机数
* 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机
* 生成了N个1到1000之间的随机整数(N≤100),对于其中重复的
* 数字,只保留一个,把其余相同的数去掉,不同的数对应着不
* 同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做
* 调查。请你协助明明完成“去重”与“排序”的工作。*/
public class Main {
public static void main(String args[]) throws Exception{
//读入字符串
//Reader InputStream
//FileReader FileInputStream
FileReader r = new FileReader("E:\\java\\random.in");
BufferedReader br = new BufferedReader(r);
String n = br.readLine();
String ns = br.readLine(); //10个字符串
//把字符串分成各个数字的字符串
String[] strs = ns.split(" "); //用空格进行切割
//把字符串中的数字字符转换成数字,并放入线性表中
//List 有重复,有序 Set 无重复,无序
//ArrayList<Integer> nums = new ArrayList<Integer>(); //数组集合
HashSet<Integer> nums = new HashSet<Integer>();
for(String str: strs) {
int num = Integer.parseInt(str);
//除去重复数字
nums.add(num);
}
//调试 System.out.println(nums);
//排序
ArrayList<Integer> list = new ArrayList<Integer>(nums);
Collections.sort(list);
//调试 System.out.println(list);
//写入random.out
PrintWriter p = new PrintWriter("E:\\java\\random.out");
p.println(list.size()); //输出list的个数
for(int t : list) {
//int i = list.size()-1;i>=0;i--
//p.print(list.get(i)+ " "); // 这两行为降序输出
p.print(t + " ");
}
p.flush();
}
}