题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
代码
import java.util.*;
public class luogu1059{public static void main(String args[]){Scanner sc = new Scanner(System.in);int n = sc.nextInt();//总数int[] ar = new int[1001];//默认全部赋值为0for(int i = 0;i<n;i++){int index = sc.nextInt();//将随机数转变为数组下标ar[index] = 1;//去重}int count = 0;for(int j =1;j<1001;j++){if(ar[j] == 1)count++;//去重后的数量}System.out.println(count);for(int k =1;k<1001;k++){if(ar[k] == 1)//查找随机数转变的下标System.out.print(k+" ");//由于从小到大遍历,输出下标即是排序}}
}
这个题的排序方法很巧妙,不像一般那样将输入的值保存在数组内,而是转变为数组下标,数组内的值置1作为标志位,遍历时从小到大输出下标即完成了排序输出。就是挺占用存储空间的,分配了1001个内存单元,而且遍历了三次。