【TOJ 5458】C++实验:共线问题

描述

给定若干个点,问最多有多少个点是共线的。

主函数代码已经给出,请将其余代码补充完整,提交时请勿包含给定代码。

int main()
{
	vector<Point> vec;
	Point p;
	while(cin>>p)
	{
		vec.push_back(p);
	}
	cout<<maxPoints(vec)<<endl;
}

输入

输入数据有若干行,每行两个整数x和y,表示一个点(x, y)。

输出

输出为一个整数,表示共线的最多点数。

样例输入

1 1
2 2
3 3
2 4

样例输出

3

扫描二维码关注公众号,回复: 970117 查看本文章
#include<bits/stdc++.h>
using namespace std;
class Point{
public:
    int x,y;
    Point(int x=0,int y=0):x(x),y(y){}
    friend istream&operator>>(istream &is,Point&p)
    {
        is>>p.x>>p.y;
        return is;
    }
}; 
int maxPoints(vector<Point>v)
{
    int i,j,k,maxx=0;
    for(i=0;i<v.size();i++)
    {
        for(j=i+1;j<v.size();j++)
        {
            int sum=2;
            double x1=v[i].x-v[j].x;
            double y1=v[i].y-v[j].y;
            for(k=j+1;k<v.size();k++)
            {
                double x2=v[j].x-v[k].x;
                double y2=v[j].y-v[k].y;
                if(x1*y2-x2*y1==0)
                    sum++;
            }
            if(sum>maxx)
                maxx=sum;
        }
    }
    return maxx;
}
int main()
{
    vector<Point> vec;
    Point p;
    while(cin>>p)
    {
        vec.push_back(p);
    }
    cout<<maxPoints(vec)<<endl;
}

猜你喜欢

转载自www.cnblogs.com/kannyi/p/9068620.html
今日推荐