Solution de problème de distance de déplacement Java

Les bâtiments de la communauté résidentielle de Planet X sont tous identiques et disposés selon un modèle matriciel. Le numéro du bâtiment est 1, 2, 3 ... Lorsqu'une rangée est pleine, le numéro est disposé dans le sens opposé du bâtiment adjacent dans la rangée suivante.
• Par exemple: lorsque le numéro de la communauté est 6 et que la situation de départ est la suivante:
• 1 2 3 4 5 6
• 12 11 10 9 8 7
• 13 14 15…
• Notre problème est: deux numéros de bâtiment m et n , la distance de déplacement la plus courte entre eux (ne peut pas se déplacer en diagonale) est requise.
• L'entrée est de 3 entiers wmn, séparés par des espaces, tous compris entre 1 et 10 000.
• w est la largeur du numéro de ligne, m et n sont à calculer Le numéro de bâtiment.
• Il est nécessaire de sortir un entier, qui représente la distance de déplacement la plus courte entre les deux bâtiments de mn.

• Par exemple:
• Entrée utilisateur:
• 6 8 2
• Ensuite, le programme doit sortir:
• 4
• Un autre exemple:
• Entrée utilisateur:
• 4 7 20
• Ensuite, le programme doit sortir:
• 5

Il est interdit de se déplacer en diagonale, il est facile de connaître l'itinéraire de marche entre les deux points, d'abord à gauche puis à droite ou à droite et ensuite à gauche, avec la même distance. Donc seulement en déterminant les coordonnées de deux points, la distance peut être obtenue en faisant la différence entre les coordonnées x et y.
La seule chose à noter est que les coordonnées sont différentes et font attention à la relation positive et négative .

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

Je suppose que tu aimes

Origine blog.csdn.net/m0_48036171/article/details/114235821
conseillé
Classement