#38933: c/c++/java因為最近終於JAVA有通了,開始用JAVA解題


bobobo0413 (杜拜、慕尼黑、蘇黎世、清邁、東京、首爾、布拉格)

學校 : 國立臺灣大學
編號 : 252359
來源 : [42.76.162.171]
最後登入時間 :
2024-04-13 18:42:54
i428. 1. 巴士站牌 -- 2022年10月APCS | From: [1.169.209.177] | 發表日期 : 2024-01-04 20:44

解題思路:我發現輸入要先想過,我使用PX.PY紀錄第一次,之後用X.Y紀錄第二次之後的,就不用陣列了。運算方面,依照題目要求寫,因為第一題這種都會出小程式,就直接解就好,

好像沒甚麼好講的。JAVA要記得寫絕對值的函式。以下附上JAVA原始碼:

import java.util.Scanner; //c:include<stdio.h> include<math.h> c++:include<cstdio> include<cmath>

 

public class A20240104 {

public static void main(String[] args) { //c.c++:int main(){

int i,n,m=0,a=200,px,py,x,y;

Scanner sc = new Scanner(System.in);         //c.c++:scanf("%d%d%d",&n,&px,&py);

n = sc.nextInt();

px= sc.nextInt();py = sc.nextInt();

for(i=1;i<n;i++)

{

x= sc.nextInt();y = sc.nextInt();            //c.c++:scanf("%d%d",&x,&y);

if(m<(abs(px-x)+abs(py-y)))

m=abs(px-x)+abs(py-y);

if(a>(abs(px-x)+abs(py-y)))

a=abs(px-x)+abs(py-y);

px=x;

py=y;

}

System.out.println(m+" "+a);             //c.c++:printf("%d %d\n",&m,&a); return 0;

}

 

private static int abs(int i) {       //c.c++:不用寫絕對值函式

// TODO Auto-generated method stub

if(i<0)

return -i;

return i;

}

 

}

 

 
#38935: Re: c/c++/java因為最近終於JAVA有通了,開始用JAVA解題


liaoweichen1024@gmail.com (M_SQRT)

學校 : 新北市立新莊高級中學
編號 : 195452
來源 : [122.116.111.175]
最後登入時間 :
2024-04-30 21:28:05
i428. 1. 巴士站牌 -- 2022年10月APCS | From: [118.166.131.75] | 發表日期 : 2024-01-04 21:00

其實java.lang.Mathabs()函式
Math.abs();

如果想要自己寫,用三元運算子程式碼會短一些
private static int abs(int i) {
    return i<0?-i:i;
}

 
#38936: Re: c/c++/java因為最近終於JAVA有通了,開始用JAVA解題


liaoweichen1024@gmail.com (M_SQRT)

學校 : 新北市立新莊高級中學
編號 : 195452
來源 : [122.116.111.175]
最後登入時間 :
2024-04-30 21:28:05
i428. 1. 巴士站牌 -- 2022年10月APCS | From: [118.166.131.75] | 發表日期 : 2024-01-04 21:21

其實java.lang.Mathabs()函式
Math.abs();

如果想要自己寫,用三元運算子程式碼會短一些
private static int abs(int i) {
    return i<0?-i:i;
}

$Java$ 擁有的內建函式其實比 $C/C++$ 豐富很多,通常在
java.lang.Math
java.lang.Integer
都找得到。

比較常用的函式唯獨swap()函式 $Java$ 沒有,也寫不出來,這是因為 $Java$ 無法傳遞「參考」所致。



 
#38946: Re: c/c++/java因為最近終於JAVA有通了,開始用JAVA解題


bobobo0413 (杜拜、慕尼黑、蘇黎世、清邁、東京、首爾、布拉格)

學校 : 國立臺灣大學
編號 : 252359
來源 : [42.76.162.171]
最後登入時間 :
2024-04-13 18:42:54
i428. 1. 巴士站牌 -- 2022年10月APCS | From: [42.79.61.55] | 發表日期 : 2024-01-06 10:59

其實java.lang.Mathabs()函式
Math.abs();

如果想要自己寫,用三元運算子程式碼會短一些
private static int abs(int i) {
    return i<0?-i:i;
}

我現在才知道QQ,看起來JAVA還要繼續努力學

 
#39017: Re: c/c++/java因為最近終於JAVA有通了,開始用JAVA解題


bobobo0413 (杜拜、慕尼黑、蘇黎世、清邁、東京、首爾、布拉格)

學校 : 國立臺灣大學
編號 : 252359
來源 : [42.76.162.171]
最後登入時間 :
2024-04-13 18:42:54
i428. 1. 巴士站牌 -- 2022年10月APCS | From: [114.137.70.179] | 發表日期 : 2024-01-08 07:03

其實java.lang.Mathabs()函式
Math.abs();

如果想要自己寫,用三元運算子程式碼會短一些
private static int abs(int i) {
    return i<0?-i:i;
}

$Java$ 擁有的內建函式其實比 $C/C++$ 豐富很多,通常在
java.lang.Math
java.lang.Integer
都找得到。

比較常用的函式唯獨swap()函式 $Java$ 沒有,也寫不出來,這是因為 $Java$ 無法傳遞「參考」所致。



我看你的JAVA寫得速度快空間小,想問你要怎麼寫得更快,空間更小?

 
#39019: Re: c/c++/java因為最近終於JAVA有通了,開始用JAVA解題


liaoweichen1024@gmail.com (M_SQRT)

學校 : 新北市立新莊高級中學
編號 : 195452
來源 : [122.116.111.175]
最後登入時間 :
2024-04-30 21:28:05
i428. 1. 巴士站牌 -- 2022年10月APCS | From: [210.71.71.103] | 發表日期 : 2024-01-08 11:17

我看你的JAVA寫得速度快空間小,想問你要怎麼寫得更快,空間更小?

 

主要是io優化

輸入
1. 整數/浮點數/字串 -> StreamTokenizer
2. 含空格的字串       -> BufferedReader

輸出
BufferedWriter

如果要更狠一點,你可以用 DataInputStreamDataOutputStream 自己寫一個io模板,記憶體超小,速度也很快,不過寫起來很累就是了。

StreamTokenizer 的簡略教程
https://zerojudge.tw/ShowThread?postid=38639

 
#39024: Re: c/c++/java因為最近終於JAVA有通了,開始用JAVA解題


bobobo0413 (杜拜、慕尼黑、蘇黎世、清邁、東京、首爾、布拉格)

學校 : 國立臺灣大學
編號 : 252359
來源 : [42.76.162.171]
最後登入時間 :
2024-04-13 18:42:54
i428. 1. 巴士站牌 -- 2022年10月APCS | From: [114.137.70.179] | 發表日期 : 2024-01-08 13:41

我看你的JAVA寫得速度快空間小,想問你要怎麼寫得更快,空間更小?

 

主要是io優化

輸入
1. 整數/浮點數/字串 -> StreamTokenizer
2. 含空格的字串       -> BufferedReader

輸出
BufferedWriter

如果要更狠一點,你可以用 DataInputStreamDataOutputStream 自己寫一個io模板,記憶體超小,速度也很快,不過寫起來很累就是了。

StreamTokenizer 的簡略教程
https://zerojudge.tw/ShowThread?postid=38639


感覺JAVA不容易學耶,C++比較容易上手,不過JAVA應用層面廣,值得研究

 
ZeroJudge Forum