刷题实践:通过《判断回旋镖的存在》和《连续字串和的整除问题》探索AI刷题功能 | 豆包MarsCode AI刷题

86 阅读3分钟

问题描述

小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

侧边栏

当我们没思路的时候,可以在右侧的侧边栏直接使用AI来询问,如图所示。它就会一步步的告诉我们思路。

image.png

代码检查

测试用例报错,我们可以直接选中代码,然后询问MarsCode AI代码的问题所在

image.png 它给出的分析还是很快的,不过需要我们多加判断一下下...

插入光标处,最方便的功能!!!

当我们找到了哪里报错后,可以使用最最最方便的一个功能,插入光标处,这个功能可以直接选中要修改的代码,然后直接插入替换,避免了手动复制粘贴修改的时候不小心少复制或者多复制的问题,而且个人认为在敲代码的时候方便了代码的检查重构,在做项目的时候也特别的有用啊!

image.png

代码整体思路

最后也是在MarsCode AI的帮助下成功做出了本题,思路如下:

  1. 数学原理

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

      • (y2-y1)(x3-x2) = (y3-y2)(x2-x1)
  2. Python 代码实现思路

    • 首先,我们需要定义一个函数来判断三点是否构成回旋镖。
    • 函数接收一个包含三个点坐标的列表作为参数。
    • 在函数内部,我们提取出三个点的坐标。
    • 然后,使用上述的共线条件判断公式来判断三点是否共线。
    • 如果三点不共线,则返回True,表示构成回旋镖;否则,返回False

连续字串和的整除问题思路:

  • 我们可以使用两层循环来枚举所有的连续子序列。外层循环控制子序列的起始位置,内层循环控制子序列的结束位置。

  • 对于每一个连续子序列,计算其和,然后判断这个和是否能被整除。如果能被整除,则计数加。

  • 具体步骤如下:

    • 初始化一个计数器count=0,用于记录满足条件的子序列数量。
    • 外层循环从i=0到n-1,表示子序列的起始位置。
    • 对于每一个起始位置i,内层循环从j=i到n-1,表示子序列的结束位置。
    • 在每一轮内层循环中,计算从ai到aj的子序列的和sum。
    • 判断sum是否能被b整除,即判断sum mod b == 0是否成立。如果成立,则count=count+1。
    • 循环结束后,返回count作为结果。