题目描述
X 星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3,⋯1,2,3,⋯ 。
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为 66 时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....
我们的问题是:已知了两个楼号 m 和 n,需要求出它们之间的最短移动距离。(不能斜线方向移动)
输入格式
输入为 3 个整数 w,m,n,空格分开,都在 11 到 1000010000 范围内。
w 为排号宽度,m,n 为待计算的楼号。
输出格式
要求输出一个整数,表示 m 与 n 两楼间最短移动距离。
输入输出样例
输入 #1复制
6 8 2
输出 #1复制
4
输入 #2复制
4 7 20
输出 #2复制
5
说明/提示
时限 1 秒, 256M。
蓝桥杯 2015 年省赛 B 组 H 题。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int w=sc.nextInt();
int m=sc.nextInt()-1;
int n=sc.nextInt()-1;
int x1=m/w; int x2=n/w;//行号
int y1=m%w; int y2=n%w;//列号
if(x1%2!=0) y1=w-1-y1;//判断是否为奇数行,如果是的话,翻转
if(x2%2!=0) y2=w-1-y2;//同上
int distance=Math.abs(x1-x2)+Math.abs(y1-y2);//求距离
System.out.println(distance);
}
}
注:是Math
博主是第一次参加蓝桥杯比赛,希望大家一起进步呀。
大家有啥好的实现方法也可以在评论区分享,类似的题也可以分享。
参考:
蓝桥杯AcWing学习笔记 4-2模拟的学习(附相关蓝桥真题:错误票据、移动距离、日期问题、航班时间、外卖店优先级)(Java)-CSDN博客