2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - H. 移动距离

 

思路:

1.根据题意我们可以根据楼号排序的特点把m号楼和n号楼的x坐标和y坐标确定下来。我们现在假设x轴正方向是右,y轴正方向是竖直向下↓

2.根据题意要确定x轴坐标首先要先确定它是在奇数行还是偶数行:

①当它在奇数行时((m//v)%2 != 0)分两种情况,当m能被v整除时是在最后一位,当m不能被v整除时是在。(提示:// 是整除运算符,将计算结果的小数部分舍去得一整数)

x轴第(m%v)位。

②当它在偶数行时((m//v)%2 == 0)也是分两种情况,当m能被v整除时是在x轴第一位,否则是在x轴第(v+1) - (m%v)位。

3.确定y轴坐标相对就简单很多了,即第(m//v) + 1行

4.确定距离,这里我们偷个懒不想了,直接引入个math库用abs()函数直接算出两者的x轴和y轴距离之差,再将两个方向距离之差相加即为最后的距离!

import math
v = int(input('宽度:'))
m = int(input('第一栋楼楼号:'))
n = int(input('第二栋楼楼号:'))
def x_certain(num:int):
    if (num//v) % 2 != 0:
        if num%v == 0:
            num_x = v
        else:
            num_x = num % v
    elif (num//v) %2 == 0:
        if num%v == 0:
            n_x = 1
        else:
            num_x = v - (num % v) + 1
    return  num_x
def y_certain(num):
    num_y = (num//v) + 1
    return num_y
m_x = x_certain(m)
m_y = y_certain(m)
n_x = x_certain(n)
n_y = y_certain(n)
print(abs(m_x - n_x) + abs(m_y - n_y))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值