解題思路:我發現輸入要先想過,我使用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;
}
}
其實
java.lang.Math
有abs()
函式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.lang.Math
有abs()
函式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寫得速度快空間小,想問你要怎麼寫得更快,空間更小?
我看你的JAVA寫得速度快空間小,想問你要怎麼寫得更快,空間更小?
主要是io優化
輸入
1. 整數/浮點數/字串 -> StreamTokenizer
2. 含空格的字串 -> BufferedReader
輸出BufferedWriter
如果要更狠一點,你可以用 DataInputStream
和 DataOutputStream
自己寫一個io模板,記憶體超小,速度也很快,不過寫起來很累就是了。
StreamTokenizer
的簡略教程
https://zerojudge.tw/ShowThread?postid=38639
我看你的JAVA寫得速度快空間小,想問你要怎麼寫得更快,空間更小?
主要是io優化
輸入
1. 整數/浮點數/字串 ->StreamTokenizer
2. 含空格的字串 ->BufferedReader
輸出
BufferedWriter
如果要更狠一點,你可以用
DataInputStream
和DataOutputStream
自己寫一個io模板,記憶體超小,速度也很快,不過寫起來很累就是了。
StreamTokenizer
的簡略教程
https://zerojudge.tw/ShowThread?postid=38639
感覺JAVA不容易學耶,C++比較容易上手,不過JAVA應用層面廣,值得研究