[蓝桥杯 2015 省 B] 移动距离
题目描述
X 星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3,… 。
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为 6 6 6 时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....
我们的问题是:已知了两个楼号 m m m 和 n n n,需要求出它们之间的最短移动距离。(不能斜线方向移动)
输入格式
输入为 3 3 3 个整数 w , m , n w,m,n w,m,n,空格分开,都在 1 1 1 到 10000 10000 10000 范围内。
w w w 为排号宽度, m , n m,n m,n 为待计算的楼号。
输出格式
要求输出一个整数,表示 m m m 与 n n n 两楼间最短移动距离。
样例 1
样例输入 1
6 8 2
样例输出 1
4
样例 2
样例输入 2
4 7 20
样例输出 #2
5
题解
这道题其实是计算题,即计算m所在行列,n所在行列,甭管怎么走,根据它两所在行列进行相减相加即可得到答案
def Solution():
w, m, n = map(int, input().split())
# 计算m、n所在行
import math
rm = math.ceil(m/w)
rn = math.ceil(n/w)
# 计算m、n所在列
def calcol(w, num, rnum):
# 偶数行
if rnum % 2 == 0:
lnum = w - num % w + 1
else:
lnum = num % w
return lnum
lm = calcol(w, m, rm)
ln = calcol(w, n, rn)
# 计算距离
return abs(rm-rn) + abs(lm-ln)
print(Solution())