[蓝桥杯2015初赛]移动距离

题目描述

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范围内
w为排号宽度,m,n为待计算的楼号。

输出格式

要求输出一个整数,表示m n 两楼间最短移动距离。

输入样例 复制

6 8 2
4 7 20

输出样例 复制

4
5

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     
 5     public static void main(String [] args) {
 6         Scanner s = new Scanner(System.in);
 7         while(s.hasNext()) {
 8         int w = s.nextInt();
 9         int m = s.nextInt();
10         int n = s.nextInt();
11         int distance = Math.abs((zb(m,w)[1] - zb(n, w)[1])) + Math.abs((zb(m,w)[0] - zb(n, w)[0]));
12         System.out.println(distance);
13         }
14     }
15     public static  int[] zb(int m,int w) {
16         int sz[] = new int [2];
17         int x = 0,y = 0;
18         int a = 0;
19         if (m%w == 0) {
20             a = m/w;
21         }else {
22             a = m/w + 1;
23         }
24         if(a%2==0) {
25             x = w + 1 - m%w;
26             y = a; 
27         }else {
28             x = m % w;
29             y = a;
30         }
31         sz[0] = x;
32         sz[1] = y;
33         return sz;
34     }
35 }

 

posted @ 2022-04-01 16:32  墨染流云  阅读(33)  评论(0)    收藏  举报