一:问题
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3… 当排满一行时,从下一行
相邻的楼往反方向排号。我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动) 输入为3个整数w m n,空格分开,都在1到10000范围内,要求输出一个整数,表示m n 两楼间最短移动距离。
二:代码
package week3;
import java.math.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("请输入楼宽以及两个个楼号");
Scanner in = new Scanner(System.in);
int w = in.nextInt();
int m = in.nextInt();
int n = in.nextInt();
System.out.println(calBuildingDistance(w,m,n));
}
public static int calBuildingDistance(int w,int m,int n)
{
int lineM,columnM,lineN,columnN;
lineM=(int) Math.ceil((double)m/w)-1;
lineN=(int) Math.ceil((double)n/w)-1;
if(lineM%2==0) //m号楼在正排楼列中
columnM=m-1-lineM*w;
else
columnM=w-m+lineM*w;
if(lineN%2==0)
columnN=n-1-lineN*w;
else
columnN=w-n+lineN*w;
return Math.abs(lineM-lineN)+Math.abs(columnM-columnN);
}
}