#7506: 請教JAVA高手


water15957 (小劉)

學校 : 崑山科技大學
編號 : 31032
來源 : [61.227.242.29]
最後登入時間 :
2013-02-28 13:59:26
a005. Eva 的回家作業 -- POJ | From: [36.239.246.250] | 發表日期 : 2013-02-22 15:34

import java.util.Scanner;


public class A005 {
    public static  void main (String[] args)
    {
        Scanner input = new Scanner(System.in);
        int z,a,b,c,d;
         z = input.nextInt();
        while(z-- != 0)
        {
            a=input.nextInt();
            b=input.nextInt();
            c=input.nextInt();
            d=input.nextInt();
         System.out.print(a+" "+b+" "+c+" "+d+" ");
           if(a + c == 2*b && b + d == 2*c)
           {
                System.out.println(2*d-c);
           }
            else
           {
                System.out.println(d*d/c);
           }

        }
    }
    
}
 
這已經是可以AC的了,但是有沒有辦法可以優化一點之類的,
 
感覺有點像是土法煉鋼,再請教各位高手。 
 
#7507: Re:請教JAVA高手


morris1028 (碼畜)

學校 : 國立花蓮高級中學
編號 : 3529
來源 : [114.37.59.62]
最後登入時間 :
2021-07-12 19:00:43
a005. Eva 的回家作業 -- POJ | From: [140.115.218.163] | 發表日期 : 2013-02-22 23:08

不是高手。

但優化的地方只有輸入可以優化,意即取代 Scanner。

1. 使用 BufferedReader 讀進來,然後使用字串分析,轉換成數字

2. 使用 System.in.read() 分析數字

速度會稍會快一點跟記憶體會稍微小一點

代碼如下。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        BufferedReader input = new BufferedReader(
                new InputStreamReader(System.in));
        int z, a, b, c, d;
        String line;
        try {
            //z = Integer.parseInt(input.readLine());
            z = parseInt();
            while (z-- != 0) {
                /*line = input.readLine();
                String[] token = line.split(" ");
                a = Integer.parseInt(token[0]);
                b = Integer.parseInt(token[1]);
                c = Integer.parseInt(token[2]);
                d = Integer.parseInt(token[3]);*/
                a = parseInt();
                b = parseInt();
                c = parseInt();
                d = parseInt();
                System.out.print(a + " " + b + " " + c + " " + d + " ");
                if (a + c == 2 * b && b + d == 2 * c) {
                    System.out.println(2 * d - c);
                } else {
                    System.out.println(d * d / c);
                }

            }
        } catch(Exception e) {
           
        }
    }
    public static int parseInt() {
        int i, value = 0, tmp;
        try {
            tmp = System.in.read();
            while(tmp < '0' || tmp > '9')
                tmp = System.in.read();
            value = tmp-'0';
            tmp = System.in.read();
            while(tmp >= '0' && tmp <= '9') {
                value = value * 10 + tmp-'0';
                tmp = System.in.read();
            }
        } catch(Exception e) {}
        return value;
    }
}

 
ZeroJudge Forum