判断回旋镖的存在|豆包MarsCode AI刷题

148 阅读5分钟

问题描述

小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解题

如果当写某题的时候,没有思路,不妨可以看看旁边的Mascode AI,点击给我一点思路

AI提供的思路:

要判断三个点是否构成一个回旋镖,我们需要确保以下几点:

  1. 三点不共线:三个点不在同一条直线上。可以通过计算斜率来判断。如果三点共线,则它们不能构成回旋镖。
  2. 三点互不相同:确保三个点的坐标不完全相同。
解题思路
  1. 斜率判断

    • 计算两个向量的斜率:(y2 - y1) / (x2 - x1) 和 (y3 - y1) / (x3 - x1)
    • 如果这两个斜率相等,则三点共线。
    • 为了避免除法带来的精度问题,可以使用交叉乘积来判断:(y2 - y1) * (x3 - x1) == (y3 - y1) * (x2 - x1)
  2. 点的不相同性

    • 检查三个点的坐标是否完全相同。如果任意两个点的坐标相同,则不能构成回旋镖。
算法步骤
  1. 提取三个点的坐标。
  2. 检查三个点的坐标是否完全相同。
  3. 使用交叉乘积判断三点是否共线。
  4. 如果三点不共线且互不相同,则返回 true,否则返回 false

通过这些步骤,你可以判断给定的三个点是否构成一个回旋镖。 如此一来,思路是不是就清晰了很多?或者当我们写好代码出现问题后,也可以问问Mascode AI帮忙检查一下代码是否有问题

AI修正

当我把我的代码写上去时,AI帮我进行了修正

  1. 逻辑错误:在 main 函数中,第二个测试样例的输出逻辑反了。应该是 False 而不是 True
  2. 代码风格:为了提高代码的可读性,建议在代码中添加一些注释,解释关键步骤。
  3. 边界情况:虽然题目没有明确要求,但可以考虑添加一些边界情况的检查,例如输入的点数不足三个的情况。

代码展示

#include <iostream>
#include <vector>
using namespace std;

bool solution(vector<vector<int>>& points) {
    int x1 = points[0][0], y1 = points[0][1];
    int x2 = points[1][0], y2 = points[1][1];
    int x3 = points[2][0], y3 = points[2][1];

    // 判断三点是否共线,使用斜率的交叉乘积 (y2 - y1) * (x3 - x1) != (y3 - y1) * (x2 - x1)
    if ((y2 - y1) * (x3 - x1) == (y3 - y1) * (x2 - x1)) {
        return false; // 共线,不是回旋镖
    }
    return true; // 不共线,是回旋镖
}

int main() {
    vector<vector<int>> v1 = {{1, 1}, {2, 3}, {3, 2}};
    vector<vector<int>> v2 = {{1, 1}, {2, 2}, {3, 3}};
    vector<vector<int>> v3 = {{0, 0}, {1, 1}, {1, 0}};

    cout << (solution(v1) ? "True" : "False") << endl;
    cout << (solution(v2) ? "True" : "False") << endl; // 修正逻辑错误
    cout << (solution(v3) ? "True" : "False") << endl;
    return 0;
}

功能亮点:AI 刷题的特定功能亮点

精选真题

重要性

  • 真实场景模拟:精选真题来源于真实的考试或竞赛,能够帮助学生更好地适应实际考试环境,提升应试能力。
  • 全面覆盖知识点:真题通常涵盖了各个知识点和考点,有助于学生系统地复习和巩固知识。

独特价值

  • 反馈及时:AI 系统可以即时反馈学生的答题情况,帮助学生及时发现和纠正错误。

云端编辑器

重要性

  • 随时随地编程:云端编辑器不受设备限制,学生可以在任何有网络的地方进行编程练习,提高了学习的灵活性。
  • 代码高亮与自动补全:云端编辑器通常具备代码高亮和自动补全功能,有助于学生更高效地编写和调试代码。

独特价值

  • 协作与分享:云端编辑器支持多人协作和代码分享,方便学生与同学或老师交流讨论,共同进步。
  • 资源丰富:云端编辑器通常集成了丰富的编程资源和文档,学生可以随时查阅,提高学习效果。

个性化题目推荐

重要性

  • 因材施教:个性化题目推荐根据学生的知识水平和学习进度,推荐适合的题目,避免了盲目刷题的问题。
  • 提高学习兴趣:推荐的题目难度适中,既不过于简单也不过于困难,能够激发学生的学习兴趣和动力。

独特价值

  • 智能评估:AI 系统通过分析学生的历史答题记录,智能评估学生的能力水平,提供个性化的学习路径。
  • 动态调整:随着学生能力的提升,AI 系统会动态调整推荐的题目难度,确保学生始终处于最佳的学习状态