Bailian4072 判断多个点是否在同一直线
程序员文章站
2022-03-02 10:56:30
...
4072:判断多个点是否在同一直线
总时间限制: 1000ms 内存限制: 65536kB
描述
有N(1<=n<=100)< span="">个互不重合的点,并给出它们的坐标(xi,yi),问这些点是否在同一直线上。
输入
第一行是测试的组数T(1<=T<=100),其后是T组数据,每组数据第一行是该组数据点的数量N,后面跟着N行,每行代表一点的坐标,由两个数字构成,这两个数字之间由空格隔开。
输出
有T行,每行对应输入的一组数据,如果该组数据中的点在同一直线上,则该行输出True,否则输出False。
样例输入
1
3
0 0
2 2
1 1
样例输出
True
问题链接:Bailian4072 判断多个点是否在同一直线
问题简述:(略)
问题分析:判断多点共线问题,斜率相同则为共线。通过计算斜率进行判定则需要用到浮点运算,而且还要用到出发。需要转换一下计算方式,使用乘法运算和整数运算来进行判定。
程序说明:(略)
参考链接:(略)
题记:(略)
AC的C++语言程序如下:
/* Bailian4072 判断多个点是否在同一直线 */
#include <iostream>
#include <vector>
using namespace std;
struct Point {
int x, y;
};
int main()
{
int t, n;
cin >> t;
while(t--) {
cin >> n;
vector<Point> p;
int x, y;
for(int i = 0; i < n; i++) {
cin >> x >> y;
p.push_back({x, y});
}
bool flag = true;
if(n <= 2) cout << "True" << endl;
else {
int dx = p[1].x - p[0].x;
int dy = p[1].y - p[0].y;
for(int i = 2; i < n; i++)
if((p[i].x - p[i - 1].x) * dy != (p[i].y - p[i - 1].y) * dx)
flag = false;
cout << (flag ? "True" : "False") << endl;
}
}
return 0;
}
下一篇: 判断几个点是否在同一条直线上(计算几何)
推荐阅读
-
点和正方形的关系(C++)——在平面坐标系中,有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断给定的多个点是否在这
-
洛谷 1142 轰炸 【判断点是否在同一条直线上】
-
Bailian4072 判断多个点是否在同一直线
-
判断几个点是否在同一条直线上(计算几何)
-
Python入门习题(76)——OpenJudge百练习题:判断多个点是否在同一直线
-
判断多个坐标是否在同一条直线上|Python练习系列[13]
-
记:判断一个点是否在一条直线上
-
判断四个点是否在同一个平面上
-
判断空间中的3个点是否在同一直线上,Python实现