Bailian4072 判断多个点是否在同一直线

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章