移動距離Java問題の解決策

惑星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;
    }
}

おすすめ

転載: blog.csdn.net/m0_48036171/article/details/114235821