问题描述
小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提供的思路:
要判断三个点是否构成一个回旋镖,我们需要确保以下几点:
- 三点不共线:三个点不在同一条直线上。可以通过计算斜率来判断。如果三点共线,则它们不能构成回旋镖。
- 三点互不相同:确保三个点的坐标不完全相同。
解题思路
-
斜率判断:
- 计算两个向量的斜率:
(y2 - y1) / (x2 - x1)和(y3 - y1) / (x3 - x1)。 - 如果这两个斜率相等,则三点共线。
- 为了避免除法带来的精度问题,可以使用交叉乘积来判断:
(y2 - y1) * (x3 - x1) == (y3 - y1) * (x2 - x1)。
- 计算两个向量的斜率:
-
点的不相同性:
- 检查三个点的坐标是否完全相同。如果任意两个点的坐标相同,则不能构成回旋镖。
算法步骤
- 提取三个点的坐标。
- 检查三个点的坐标是否完全相同。
- 使用交叉乘积判断三点是否共线。
- 如果三点不共线且互不相同,则返回
true,否则返回false。
通过这些步骤,你可以判断给定的三个点是否构成一个回旋镖。 如此一来,思路是不是就清晰了很多?或者当我们写好代码出现问题后,也可以问问Mascode AI帮忙检查一下代码是否有问题
AI修正
当我把我的代码写上去时,AI帮我进行了修正
- 逻辑错误:在
main函数中,第二个测试样例的输出逻辑反了。应该是False而不是True。 - 代码风格:为了提高代码的可读性,建议在代码中添加一些注释,解释关键步骤。
- 边界情况:虽然题目没有明确要求,但可以考虑添加一些边界情况的检查,例如输入的点数不足三个的情况。
代码展示
#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 系统会动态调整推荐的题目难度,确保学生始终处于最佳的学习状态