Fork me on Gitee

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));
    }

}

 

posted @ 2018-12-16 22:10  ---dgw博客  阅读(1576)  评论(0编辑  收藏  举报