1. 程式人生 > >Mr.J--藍橋杯--明明的隨機數

Mr.J--藍橋杯--明明的隨機數

問題描述
  明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了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();
	}
}