惑星Xの住宅地域の建物はすべて同じで、マトリックスパターンに配置されています。建物の番号は1、2、3 ...です。列がいっぱいになると、次の列の隣接する建物とは反対方向に番号が配置されます。
•例:コミュニティの数が6で、開始状況が次の場合:
•1 2 3 4 56
•1211 10 9
87
•131415 … •問題は次のとおりです。2つの建物番号mとn 、それらの間の最短移動距離(対角線上に移動できない)が必要です。
•入力は、スペースで区切られた3つの整数wmnで、すべて1〜10000の範囲です。
•wは行番号の幅mおよびn計算されます建物番号。
•整数を出力する必要があります。これは、2つの建物間の最短移動距離であるmnを表します。
•例:
•ユーザー入力:
•6 8 2
•次に、プログラムは次のように出力します。
•4
•別の例:
•ユーザー入力:
•4 7 20
•次に、プログラムは次のように出力します。
•5
斜め方向への移動は禁止されており、同じ距離で左から右、右から左の2点間の歩行経路がわかりやすい。したがって、2点の座標を決定するだけで、x座標とy座標の差をとることで距離を取得できます。注意する
必要がある唯一のことは、座標が異なり、正と負の関係に注意を払うことです。
import java.util.Scanner;
public class T2778 {
public static void main(String[] args) {
int w,m,n;
Scanner sc = new Scanner(System.in);
w = sc.nextInt();
m = sc.nextInt();
n = sc.nextInt();
int distance = Math.abs((Locate(w,m)[1]-Locate(w,n)[1]))+Math.abs((Locate(w,m)[0]-Locate(w,n)[0]));
System.out.println(distance);
}
public static int[] Locate(int w,int m){
int[] location = new int[2];
int x1 = 1,y1 = 1;
if (m % w == 0)
y1 = m / w;
else
y1 = (m/w)+1;
if (y1 % 2 == 0){
if (m % w == 0)
x1 = 1;
else
x1 = 1 + (w - m % w);
}
else if (y1 % 2 ==1){
if (m % w == 0)
x1 = w;
else
x1 = m % w;
}
location[0] = x1;
location[1] = y1;
return location;
}
}