一、Java之ACM注意點
1. 類名稱必須採用public class Main方式命名
2. 在有些OJ系統上,即便是輸出的末尾多了一個“ ”,程式可能會輸出錯誤,所以在我看來好多OJ系統做的是非常之垃圾
3. 有些OJ上的題目會直接將OI上的題目拷貝過來,所以即便是題目中有輸入和輸出檔案,可能也不需要,因為在OJ系統中一般是採用標準輸入輸出,不需要檔案
4. 在有多行資料輸入的情況下,一般這樣處理,
[java] view plain copy static Scanner in = new Scanner(System.in); while(in.hasNextInt()) 或者是 while(in.hasNext())
5. 有關System.nanoTime() 函數的使用,該函數用來 返回最準確的可用系統計時器的當前值,以毫微秒為單位。
[java] view plain copy long startTime = System.nanoTime(); // ... the code being measured ... long estimatedTime = System.nanoTime() - startTime;
二、Java之輸入輸出處理
由於ACM競賽題目的輸入資料和輸出資料一般有多組(不定),並且格式多種多樣,所以,如何處理題目的輸入輸出是對大家的一項最基本的要求。這也是困擾初學者的一大問題。
1. 輸入:
格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in));
格式2:Scanner sc = new Scanner (System.in);
在讀入資料量大的情況下,格式1的速度會快些。
讀一個整數: int n = sc.nextInt(); 相當於 scanf("%d", &n); 或 cin >> n;
讀一個字串:String s = sc.next(); 相當於 scanf("%s", s); 或 cin >> s;
讀一個浮點數:double t = sc.nextDouble(); 相當於 scanf("%lf", &t); 或 cin >> t;
讀一整行: String s = sc.nextLine(); 相當於 gets(s); 或 cin.getline(...);
判斷是否有下一個輸入可以用sc.hasNext()或sc.hasNextInt()或sc.hasNextDouble()或sc.hasNextLine()
例1:讀入整數
| [java] view plain copy Input 輸入資料有多組,每組佔一行,由一個整數組成。 Sample Input 56 67 100 123 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc =new Scanner(System.in); while(sc.hasNext()){ //判斷是否結束 int score = sc.nextInt();//讀入整數 。。。。 } } } |
例2:讀入實數
輸入資料有多組,每組佔2行,第一行為一個整數N,指示第二行包含N個實數。