解题思路:通过坐标转换进行求解

注意事项:

参考代码:

import math
ver = list(map(int,input().split()))
def x_y_transform(ver):#转换为笛卡尔坐标
    d,p,q = ver[0],ver[1],ver[2]
    x_axis = distance[d][0]*p + distance[(d+2)%6][0]*q
    y_axis = distance[d][1]*p + distance[(d+2)%6][1]*q
    return x_axis,y_axis
def distanction(a,b):#计算两点之间的横纵坐标之间的距离
    if a*b>0:
        dx = abs(a-b)
    else:
        dx = abs(a)+abs(b)
    return dx
a = math.sqrt(3)
distance = [[-1,0],[-1/2,a/2],[1/2,a/2],[1,0],[1/2,-a/2],[-1/2,-a/2]]#6个方向距离原点距离为1的横纵坐标
x1,y1 = x_y_transform(ver[:3])
x2,y2 = x_y_transform(ver[3:])
dx = distanction(x1,x2)
dy = distanction(y1,y2)
count = round(2*dy/a)
if dx*a<=dy:
    print(count)
else:
    print(count+round(dx-count/2))


点赞(0)
 

0.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 4 条评论

ENEN 2年前 回复TA
@ENEN 刚刚试了,a=2的时候直接int()即可,看来要采用round()的原因是计算精度
ENEN 2年前 回复TA
3.可以发现a的值其实并不重要,未验证的猜想:“如果a=2那么可能不需要round(),直接int()即可”
ENEN 2年前 回复TA
2.没有解释为什么是count = round(2*dy/a)而不是count = int(2*dy/a)、类似的还有print(count+round(dx-count/2)),
是计算的精度问题还是其他问题?
ENEN 2年前 回复TA
1.distance 函数直接return abs(a-b)即可
根本不需要判断同号还是异号,数轴上画一画就知道,判断同号还是异号有点没必要