刷题之路,道阻且长(四)| 豆包MarsCode AI刷题

57 阅读2分钟

这次还是先从一道简单的题入手,体验一下豆包的ai刷题跟别的刷题有什么不一样吧

题目:判断回旋镖的存在

问题描述

小M正在玩一个几何游戏,给定一个二维平面上的三个点 points,其中每个点用坐标 points[i] = [xi, yi] 表示。如果三点构成一个回旋镖,则返回 true。回旋镖的定义是三点不在一条直线上,并且这三个点互不相同。

请你帮助小M判断这些点是否构成一个回旋镖。


测试样例

样例1:

输入:points = [[1, 1], [2, 3], [3, 2]]
输出:True

样例2:

输入:points = [[1, 1], [2, 2], [3, 3]]
输出:False

样例3:

输入:points = [[0, 0], [1, 1], [1, 0]]
输出:True

首先进行题目分析:

  1. 题目内容分析

    • 这是一道几何问题。题目背景是小 M 在玩一个几何游戏,给定二维平面上的三个点的坐标points[i] = [xi, yi]
    • 需要判断这三个点是否构成一个回旋镖。回旋镖的定义是三点不在一条直线上,并且这三个点互不相同。
    • 如果三点构成一个回旋镖,则返回true,否则返回false
  2. 解题思路分析

    • 要判断三点是否构成回旋镖,核心是判断三点是否共线。

    • 对于二维平面上的三个点A(x1, y1)B(x2, y2)C(x3, y3),如果它们共线,则满足以下条件:

      • 向量AB与向量AC的斜率相等,即(y2 - y1) / (x2 - x1)=(y3 - y1) / (x3 - x1)
    • 为了避免除法带来的精度问题,可以使用叉积来判断三点是否共线。

      • 对于向量AB=(x2 - x1, y2 - y1)和向量AC=(x3 - x1, y3 - y1),如果它们的叉积为 0,则三点共线。
      • 叉积公式:(x2 - x1) * (y3 - y1)-(y2 - y1) * (x3 - x1)
    • 具体步骤如下:

      • 从给定的points数组中取出三个点的坐标。
      • 计算向量叉积。
      • 如果叉积不等于 0,则三点不共线,构成回旋镖,返回true;如果叉积等于 0,则三点共线,不构成回旋镖,返回false

要是实在想不到,没有思路,也不知道怎么写可以用ai给出点代码提示

image.png

def solution(points: list) -> bool:
    (x1, y1), (x2, y2), (x3, y3) = points
    return (x2 - x1) * (y3 - y1)!= (y2 - y1) * (x3 - x1)

if __name__ == '__main__':
    print(solution(points=[[1, 1], [2, 3], [3, 2]]) == True)
    print(solution(points=[[1, 1], [2, 2], [3, 3]]) == False)
    print(solution(points=[[0, 0], [1, 1], [1, 0]]) == True)

image.png

豆包的MarsCode AI刷题是不是很有趣呢