明明的随机数
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完 成“去重”与“排序”的工作。
输入描述:
输入多行,先输入随机整数的个数,在输入相应个数的整数
输出描述:
返回多行,处理后的结果
输入例子:
11 10 20 40 32 67 40 20 89 300 400 15
输出例子:
10 15 20 32 40 67 89 300 400
思路1:最简单与最直接的方法,使用java集合中的TreeSet集合,其中存储的元素默认为有序而且无重复。
1 import java.util.Scanner; 2 import java.util.TreeSet; 3 4 public class Main 5 { 6 public static void main(String[] args) { 7 Scanner sc=new Scanner(System.in); 8 while(sc.hasNext()){ 9 10 TreeSet<Integer> set=new TreeSet<Integer>(); 11 int n=sc.nextInt(); 12 if(n>0){ 13 for(int i=0;i<n;i++){ 14 set.add(sc.nextInt()); 15 } 16 } 17 for(Integer i:set){ 18 System.out.println(i); 19 } 20 } 21 } 22 }
思路2:参考别人,看代码即可
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sr = new Scanner(System.in); 6 7 while (sr.hasNext()) { 8 int n = sr.nextInt(); 9 int[] a = new int[n]; 10 for (int i = 0; i < n; i++) { 11 a[i] = sr.nextInt(); 12 } 13 int[] c = dupDele(a); 14 15 for (int i = 0; i < 1000; i++) { 16 if (c[i] == 1) { 17 System.out.println(i); 18 } 19 } 20 } 21 } 22 23 public static int[] dupDele(int[] a) {//进行去重 24 int[] b = new int[1000]; 25 for (int i = 0; i < 1000; i++) { 26 b[i] = 0; 27 } 28 for (int i = 0; i < a.length; i++) { 29 b[a[i]] = 1; 30 } 31 return b; 32 } 33 }
思路3:先用List存储元素,然后利用COllections类的sort()方法进行排序,然后通过比较拿到重复元素的下表,最后利用List的remove()方法删除List中的重复元素
1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.List; 4 import java.util.Scanner; 5 6 public class Test{ 7 public static void main(String[] args){ 8 Scanner sc =new Scanner(System.in); 9 List<Integer> li = new ArrayList<>(); 10 while(sc.hasNextInt()){ 11 int n = sc.nextInt(); 12 for(int i=0;i<n;i++){ 13 li.add(sc.nextInt()); 14 } 15 Collections.sort(li); 16 List<Integer> tem = new ArrayList<>(); 17 for(int i=1;i<n;i++){ 18 if(li.get(i-1)==li.get(i)){ 19 tem.add(i); 20 } 21 } 22 for(int i =0;i<tem.size();i++){ 23 li.remove((int)tem.get(i));//这里是删除指定位置的元素;
//不能写成li.remove(tem.get(i));因为ArrayList有两个remove方法,一个是根据位置删除元素,
//另一个是指定删除元素;具体见API
24 } 25 for(Integer i : li) 26 System.out.println(i); 27 28 } 29 } 30 }