康斯坦丁


私信TA

用户名:13228491660

访问量:964

签 名:

等  级
排  名 17909
经  验 715
参赛次数 0
文章发表 4
年  龄 0
在职情况 学生
学  校 四川文理学院
专  业

  自我简介:

TA的其他文章

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

注意事项:

参考代码:

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分

4 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

3.可以发现a的值其实并不重要,未验证的猜想:“如果a=2那么可能不需要round(),直接int()即可”
2023-01-12 12:41:02
2.没有解释为什么是count = round(2*dy/a)而不是count = int(2*dy/a)、类似的还有print(count+round(dx-count/2)),
是计算的精度问题还是其他问题?
2023-01-12 12:37:30
1.distance 函数直接return abs(a-b)即可
根本不需要判断同号还是异号,数轴上画一画就知道,判断同号还是异号有点没必要
2023-01-12 12:36:59
  • «
  • 1
  • »