X星球居民小区的楼房全是一样的...
每周一题之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)); } }