题目
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。
其楼房的编号为
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为 时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....
我们的问题是:已知了两个楼号 和 ,需要求出它们之间的最短移动距离(不能斜线方向移动)。
输入格式
输入共一行,包含三个整数 , 为排号宽度, 为待计算的楼号。
输出格式
输出一个整数,表示 两楼间最短移动距离。
数据范围
,
输入样例:
6 8 2
输出样例:
4
解题
方法一:数学 模拟
思路
根据给出的数字求出两栋楼房的行号和列号然后求曼哈顿距离即可。
代码
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
in.nextToken();
int w = (int) in.nval;
in.nextToken();
int m = (int) in.nval;
in.nextToken();
int n = (int) in.nval;
--m;
--n;
int mx = m / w;
int my = (mx & 1) == 0 ? m % w : w - m % w - 1;
int nx = n / w;
int ny = (nx & 1) == 0 ? n % w : w - n % w - 1;
System.out.println(Math.abs(mx - nx) + Math.abs(my - ny));
}
}
评论区