題目描述
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了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個內存單元,而且遍歷了三次。