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