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
package 第06届蓝桥杯JavaC组省赛;
import java.util.*;
public class H {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int w=sc.nextInt();
int m=sc.nextInt();
int n=sc.nextInt();
int rows = 100000/w+1; // 行数
// int rows = 10; // 行数
int cols = w; // 列数
int[][] seats = new int[rows][cols];
// 初始化座位号
int seatNumber = 1;
for (int i = 0; i < rows; i++) {//控制行
if (i % 2 == 0) {
// 偶数行,从左到右 因为从0开始所有从左到右从小到大排
for (int j = 0; j < cols; j++) {
seats[i][j] = seatNumber;//s[0][0]=1 s[0][1]=2…… s[0][5]=6
seatNumber++;
}
} else {
// 奇数行,从右到左
for (int j = cols - 1; j >= 0; j--) {
seats[i][j] = seatNumber;
seatNumber++;
}
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j <cols ; j++) {
System.out.print(seats[i][j]+" ");
}
System.out.println();//换行
}
int mRow = 0;//m的行数
int mCol = 0;//m的列数
int nRow = 0;//n的行数
int nCol = 0;//n的列数
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (seats[i][j] == m) {
mRow = i+1;
mCol = j+1;
}
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (seats[i][j] == n) {
nRow = i+1;
nCol = j+1;
}
}
}
// System.out.println("m的位置:(i=" + mRow + ", j=" + mCol + ")");
// System.out.println("n的位置:(i=" + nRow + ", j=" + nCol + ")");
int distance=Math.abs(mRow-nRow)+Math.abs(mCol-nCol);
System.out.println(distance);
}
}