每周一题之3
[问题描述]
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 december.year18;import java.util.Scanner;public class Solution4 {public static void main(String[] args) {Scanner input =new Scanner(System.in);int w=input.nextInt();int m=input.nextInt();int n=input.nextInt();int [][] maps=new int[10001][w];for (int i = 0; i < w; i++) {maps[0][i]=i+1;}int maxn=Math.max(m, n);int len=maxn/w+1;System.out.println(len);int temp=0;for (int i = 0; i <len ; i++) {if(i%2==0) {int bei=(i+2)*w;for (int j = 0; j <w ; j++) {maps[i+1][j]=bei-j;}temp=bei;}else {for (int j = 0; j <w ; j++) {maps[i+1][j]=temp+j+1;}}}int x1 = 0,y1 = 0,x2 = 0,y2 = 0;for (int i = 0; i < len; i++) {for (int j = 0; j < w; j++) {if(maps[i][j]==n) {x1=i;y1=j;}else if(maps[i][j]==m) {x2=i;y2=j;}}}System.out.println(Math.abs((x2-x1)+y2-y1));}}