[问题描述]
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....
我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)
输入为3个整数w m n,空格分开,都在1到10000范围内
要求输出一个整数,表示m n 两楼间最短移动距离。
[样例输入]
6 8 2
[样例输出]
4
[样例输入]
4 7 20
[样例输出]
5
public class Main{
public static void main(String args[]) {
Scanner scan=new Scanner(System.in);
int w=scan.nextInt();//宽度
int a2=scan.nextInt();//8
int a3=scan.nextInt();//2
int i1;
if(a2>a3)
{
i1=a2/w+1;//8/6=2行
}else
i1=a3/w+1;
int j=1;
int a[][]=new int[i1][w];
for(int i=0;i<i1;i++) {
for(int i2=0;i2<w;i2++)
{
a[i][i2]=j;
j++;//赋值
}
}
for(int i=0;i<i1;i++) {
if(i%2==1) {
for(int i2=0;i2<w/2;i2++)
{
int temp=a[i][i2];
a[i][i2]=a[i][w-i2-1];
a[i][w-i2-1]=temp;
}
}
}
int x1 = 0;
int x2 = 0;
int y1 = 0;
int y2 = 0;
for(int i=0;i<i1;i++) {
for(int i2=0;i2<w;i2++){
if(a[i][i2]==a2) {
x1=i;
y1=i2;
}
if(a[i][i2]==a3) {
x2=i;
y2=i2;
}
}
}
int b1=0;
int b2=0;
if(x2>x1) {
b1=x2-x1;
b2=y2-y1;
}
else{
b1=x1-x2;
b2=y1-y2;
}
System.out.println(b1+b2);
}
}